FDCAN_TxHeaderTypeDef TxHeader1; FDCAN_TxHeaderTypeDef TxHeader2; FDCAN_RxHeaderTypeDef RxHeader; uint8_t TxData1[12]; uint8_t TxData2[] = {0x9, 0x33, 0x45, 0x67, 0x98, 0x3, 0x1, 0x0, 0x88, 0x66, 0x22, 0x33}; uint8_t RxData[12]; uint8_t SPACE = 32; char buffer[32]; int indx = 0; void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs) { if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET) { /* Retreive Rx messages from RX FIFO0 */ if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK) { /* Reception Error */ Error_Handler(); } if (HAL_FDCAN_ActivateNotification(hfdcan, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK) { /* Notification Error */ Error_Handler(); } } } /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_FDCAN1_Init(); MX_USART3_UART_Init(); MX_FDCAN2_Init(); /* USER CODE BEGIN 2 */ if(HAL_FDCAN_Start(&hfdcan1)!= HAL_OK) { Error_Handler(); } if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK) { /* Notification Error */ Error_Handler(); } TxHeader1.Identifier = 0x11; TxHeader1.IdType = FDCAN_STANDARD_ID; TxHeader1.TxFrameType = FDCAN_DATA_FRAME; TxHeader1.DataLength = FDCAN_DLC_BYTES_12; TxHeader1.ErrorStateIndicator = FDCAN_ESI_ACTIVE; TxHeader1.BitRateSwitch = FDCAN_BRS_OFF; TxHeader1.FDFormat = FDCAN_FD_CAN; TxHeader1.TxEventFifoControl = FDCAN_NO_TX_EVENTS; TxHeader1.MessageMarker = 0; TxHeader2.Identifier = 0x139; TxHeader2.IdType = FDCAN_STANDARD_ID; TxHeader2.TxFrameType = FDCAN_DATA_FRAME; TxHeader2.DataLength = FDCAN_DLC_BYTES_12; TxHeader2.ErrorStateIndicator = FDCAN_ESI_ACTIVE; TxHeader2.BitRateSwitch = FDCAN_BRS_OFF; TxHeader2.FDFormat = FDCAN_FD_CAN; TxHeader2.TxEventFifoControl = FDCAN_NO_TX_EVENTS; TxHeader2.MessageMarker = 0; while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //Message generieren for (int i=0; i<12; i++) { TxData1[i] = indx++; } //Message 2 senden (dieser Identifier soll gefiltert in FIFO0 ankommen) if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader2, TxData2)!= HAL_OK) { Error_Handler(); } HAL_Delay(100); //Message 1 senden if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader1, TxData1)!= HAL_OK) { Error_Handler(); } HAL_Delay(100); for (int i=0; i<11; i++) { HAL_UART_Transmit(&huart3, (uint8_t*)buffer, sprintf(buffer, "%X%c", RxData[i], SPACE), TIMEOUT); } HAL_UART_Transmit(&huart3, (uint8_t*)buffer, sprintf(buffer, "%X\r\n", RxData[11]), TIMEOUT); HAL_Delay(250); } static void MX_FDCAN1_Init(void) { /* USER CODE BEGIN FDCAN1_Init 0 */ /* USER CODE END FDCAN1_Init 0 */ /* USER CODE BEGIN FDCAN1_Init 1 */ /* USER CODE END FDCAN1_Init 1 */ hfdcan1.Instance = FDCAN1; hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_BRS; hfdcan1.Init.Mode = FDCAN_MODE_INTERNAL_LOOPBACK; hfdcan1.Init.AutoRetransmission = ENABLE; hfdcan1.Init.TransmitPause = DISABLE; hfdcan1.Init.ProtocolException = DISABLE; hfdcan1.Init.NominalPrescaler = 2; hfdcan1.Init.NominalSyncJumpWidth = 10; hfdcan1.Init.NominalTimeSeg1 = 39; hfdcan1.Init.NominalTimeSeg2 = 10; hfdcan1.Init.DataPrescaler = 1; hfdcan1.Init.DataSyncJumpWidth = 7; hfdcan1.Init.DataTimeSeg1 = 17; hfdcan1.Init.DataTimeSeg2 = 7; hfdcan1.Init.MessageRAMOffset = 0; hfdcan1.Init.StdFiltersNbr = 1; hfdcan1.Init.ExtFiltersNbr = 0; hfdcan1.Init.RxFifo0ElmtsNbr = 1; hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_12; hfdcan1.Init.RxFifo1ElmtsNbr = 0; hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8; hfdcan1.Init.RxBuffersNbr = 0; hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_12; hfdcan1.Init.TxEventsNbr = 0; hfdcan1.Init.TxBuffersNbr = 0; hfdcan1.Init.TxFifoQueueElmtsNbr = 1; hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_12; if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN FDCAN1_Init 2 */ FDCAN_FilterTypeDef sFilterConfig; sFilterConfig.IdType = FDCAN_STANDARD_ID; sFilterConfig.FilterIndex = 0; sFilterConfig.FilterType = FDCAN_FILTER_DUAL; sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; sFilterConfig.FilterID1 = 0x139; sFilterConfig.FilterID2 = 0x14A; sFilterConfig.RxBufferIndex = 0; if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK) { /* Filter configuration Error */ Error_Handler(); } //if(HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_REJECT_REMOTE, FDCAN_REJECT_REMOTE) != HAL_OK) //{ // Error_Handler(); //}