| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- /* USER CODE BEGIN Header */
- /**
- ******************************************************************************
- * @file fdcan.c
- * @brief This file provides code for the configuration
- * of the FDCAN instances.
- ******************************************************************************
- * @attention
- *
- * Copyright (c) 2026 STMicroelectronics.
- * All rights reserved.
- *
- * This software is licensed under terms that can be found in the LICENSE file
- * in the root directory of this software component.
- * If no LICENSE file comes with this software, it is provided AS-IS.
- *
- ******************************************************************************
- */
- /* USER CODE END Header */
- /* Includes ------------------------------------------------------------------*/
- #include "fdcan.h"
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- FDCAN_HandleTypeDef hfdcan1;
- FDCAN_HandleTypeDef hfdcan2;
- /* FDCAN1 init function */
- 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.ClockDivider = FDCAN_CLOCK_DIV1;
- hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
- hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;
- hfdcan1.Init.AutoRetransmission = DISABLE;
- hfdcan1.Init.TransmitPause = DISABLE;
- hfdcan1.Init.ProtocolException = ENABLE;
- hfdcan1.Init.NominalPrescaler = 1;
- hfdcan1.Init.NominalSyncJumpWidth = 1;
- hfdcan1.Init.NominalTimeSeg1 = 21;
- hfdcan1.Init.NominalTimeSeg2 = 3;
- hfdcan1.Init.DataPrescaler = 1;
- hfdcan1.Init.DataSyncJumpWidth = 1;
- hfdcan1.Init.DataTimeSeg1 = 21;
- hfdcan1.Init.DataTimeSeg2 = 3;
- hfdcan1.Init.StdFiltersNbr = 1;
- hfdcan1.Init.ExtFiltersNbr = 1;
- hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
- if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN FDCAN1_Init 2 */
- /* USER CODE END FDCAN1_Init 2 */
- }
- /* FDCAN2 init function */
- void MX_FDCAN2_Init(void)
- {
- /* USER CODE BEGIN FDCAN2_Init 0 */
- /* USER CODE END FDCAN2_Init 0 */
- /* USER CODE BEGIN FDCAN2_Init 1 */
- /* USER CODE END FDCAN2_Init 1 */
- hfdcan2.Instance = FDCAN2;
- hfdcan2.Init.ClockDivider = FDCAN_CLOCK_DIV1;
- hfdcan2.Init.FrameFormat = FDCAN_FRAME_CLASSIC;
- hfdcan2.Init.Mode = FDCAN_MODE_NORMAL;
- hfdcan2.Init.AutoRetransmission = DISABLE;
- hfdcan2.Init.TransmitPause = DISABLE;
- hfdcan2.Init.ProtocolException = ENABLE;
- hfdcan2.Init.NominalPrescaler = 1;
- hfdcan2.Init.NominalSyncJumpWidth = 1;
- hfdcan2.Init.NominalTimeSeg1 = 21;
- hfdcan2.Init.NominalTimeSeg2 = 3;
- hfdcan2.Init.DataPrescaler = 1;
- hfdcan2.Init.DataSyncJumpWidth = 1;
- hfdcan2.Init.DataTimeSeg1 = 21;
- hfdcan2.Init.DataTimeSeg2 = 3;
- hfdcan2.Init.StdFiltersNbr = 1;
- hfdcan2.Init.ExtFiltersNbr = 1;
- hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
- if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)
- {
- Error_Handler();
- }
- /* USER CODE BEGIN FDCAN2_Init 2 */
- /* USER CODE END FDCAN2_Init 2 */
- }
- static uint32_t HAL_RCC_FDCAN_CLK_ENABLED=0;
- void HAL_FDCAN_MspInit(FDCAN_HandleTypeDef* fdcanHandle)
- {
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
- if(fdcanHandle->Instance==FDCAN1)
- {
- /* USER CODE BEGIN FDCAN1_MspInit 0 */
- /* USER CODE END FDCAN1_MspInit 0 */
- /** Initializes the peripherals clock
- */
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FDCAN;
- PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_HSE;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /* FDCAN1 clock enable */
- HAL_RCC_FDCAN_CLK_ENABLED++;
- if(HAL_RCC_FDCAN_CLK_ENABLED==1){
- __HAL_RCC_FDCAN_CLK_ENABLE();
- }
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**FDCAN1 GPIO Configuration
- PA11 ------> FDCAN1_RX
- PA12 ------> FDCAN1_TX
- */
- GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN1;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- /* FDCAN1 interrupt Init */
- HAL_NVIC_SetPriority(FDCAN1_IT0_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(FDCAN1_IT0_IRQn);
- /* USER CODE BEGIN FDCAN1_MspInit 1 */
- /* USER CODE END FDCAN1_MspInit 1 */
- }
- else if(fdcanHandle->Instance==FDCAN2)
- {
- /* USER CODE BEGIN FDCAN2_MspInit 0 */
- /* USER CODE END FDCAN2_MspInit 0 */
- /** Initializes the peripherals clock
- */
- PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_FDCAN;
- PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_HSE;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
- {
- Error_Handler();
- }
- /* FDCAN2 clock enable */
- HAL_RCC_FDCAN_CLK_ENABLED++;
- if(HAL_RCC_FDCAN_CLK_ENABLED==1){
- __HAL_RCC_FDCAN_CLK_ENABLE();
- }
- __HAL_RCC_GPIOB_CLK_ENABLE();
- /**FDCAN2 GPIO Configuration
- PB12 ------> FDCAN2_RX
- PB13 ------> FDCAN2_TX
- */
- GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF9_FDCAN2;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
- /* FDCAN2 interrupt Init */
- HAL_NVIC_SetPriority(FDCAN2_IT0_IRQn, 0, 0);
- HAL_NVIC_EnableIRQ(FDCAN2_IT0_IRQn);
- /* USER CODE BEGIN FDCAN2_MspInit 1 */
- /* USER CODE END FDCAN2_MspInit 1 */
- }
- }
- void HAL_FDCAN_MspDeInit(FDCAN_HandleTypeDef* fdcanHandle)
- {
- if(fdcanHandle->Instance==FDCAN1)
- {
- /* USER CODE BEGIN FDCAN1_MspDeInit 0 */
- /* USER CODE END FDCAN1_MspDeInit 0 */
- /* Peripheral clock disable */
- HAL_RCC_FDCAN_CLK_ENABLED--;
- if(HAL_RCC_FDCAN_CLK_ENABLED==0){
- __HAL_RCC_FDCAN_CLK_DISABLE();
- }
- /**FDCAN1 GPIO Configuration
- PA11 ------> FDCAN1_RX
- PA12 ------> FDCAN1_TX
- */
- HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
- /* FDCAN1 interrupt Deinit */
- HAL_NVIC_DisableIRQ(FDCAN1_IT0_IRQn);
- /* USER CODE BEGIN FDCAN1_MspDeInit 1 */
- /* USER CODE END FDCAN1_MspDeInit 1 */
- }
- else if(fdcanHandle->Instance==FDCAN2)
- {
- /* USER CODE BEGIN FDCAN2_MspDeInit 0 */
- /* USER CODE END FDCAN2_MspDeInit 0 */
- /* Peripheral clock disable */
- HAL_RCC_FDCAN_CLK_ENABLED--;
- if(HAL_RCC_FDCAN_CLK_ENABLED==0){
- __HAL_RCC_FDCAN_CLK_DISABLE();
- }
- /**FDCAN2 GPIO Configuration
- PB12 ------> FDCAN2_RX
- PB13 ------> FDCAN2_TX
- */
- HAL_GPIO_DeInit(GPIOB, GPIO_PIN_12|GPIO_PIN_13);
- /* FDCAN2 interrupt Deinit */
- HAL_NVIC_DisableIRQ(FDCAN2_IT0_IRQn);
- /* USER CODE BEGIN FDCAN2_MspDeInit 1 */
- /* USER CODE END FDCAN2_MspDeInit 1 */
- }
- }
- /* USER CODE BEGIN 1 */
- void MYADD_FDCAN1_InitFilter(void)
- {
- FDCAN_FilterTypeDef sFilterConfig = {0};
- //标准帧不设置过滤
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
- sFilterConfig.FilterIndex = 0;
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
- sFilterConfig.FilterID1 = 0;
- sFilterConfig.FilterID2 = 0;
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- //拓展帧不设置过滤
- sFilterConfig.IdType = FDCAN_EXTENDED_ID;
- sFilterConfig.FilterIndex = 0;
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
- sFilterConfig.FilterID1 = 0;
- sFilterConfig.FilterID2 = 0;
- if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
-
- HAL_FDCAN_ConfigGlobalFilter(&hfdcan1,FDCAN_REJECT,FDCAN_REJECT, DISABLE, DISABLE);
-
- HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0);
-
- HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_BUS_OFF, 0);
-
- HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_MESSAGE_LOST, 0);
-
- HAL_FDCAN_Start(&hfdcan1);
- }
- void MYADD_FDCAN2_InitFilter(void)
- {
- FDCAN_FilterTypeDef sFilterConfig = {0};
- //标准帧不设置过滤
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
- sFilterConfig.FilterIndex = 0;
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
- sFilterConfig.FilterID1 = 0;
- sFilterConfig.FilterID2 = 0;
- if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- //拓展帧不设置过滤
- sFilterConfig.IdType = FDCAN_EXTENDED_ID;
- sFilterConfig.FilterIndex = 0;
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
- sFilterConfig.FilterID1 = 0;
- sFilterConfig.FilterID2 = 0;
- if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_FDCAN_ConfigGlobalFilter(&hfdcan2,FDCAN_REJECT,FDCAN_REJECT, DISABLE, DISABLE);
-
- HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO1_NEW_MESSAGE, 0);
-
- HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_BUS_OFF, 0);
-
- HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO1_MESSAGE_LOST, 0);
-
- HAL_FDCAN_Start(&hfdcan2);
- }
- /* USER CODE END 1 */
|