Page 1 of 1

UAEFI connection to STM32G474 VIA CAN

Posted: Tue Sep 02, 2025 4:40 pm
by franc
Hi,
I have some trouble for 2 weeks now :? trying to connect UA ecu to STM32 dev board (I want to make simple dash screen). STM32G474 has FDCAN peripheral but it is cross compatible with old CAN BUS. I can't identify exact problem one of them is that NVIC doesn't run RXcallback function. Is there any specific CAN BUS setting in Tuner studio MS or am I doing something wrong with filter settings.

My settings in Tuner studio MS are:
image.png
Here is code for FDCAN initialization (36MHz FDCAN Clock) -> 500kbps :

Code: Select all

static void MX_FDCAN2_Init(void)
{

  /* USER CODE BEGIN FDCAN2_Init 0 */
	// Omogoči prekinitev za FDCAN2 v NVIC

	FDCAN_FilterTypeDef sFilterConfig; //DeclareS CAN filter structure

  /* 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 = DISABLE;
  hfdcan2.Init.NominalPrescaler = 1;
  hfdcan2.Init.NominalSyncJumpWidth = 3;
  hfdcan2.Init.NominalTimeSeg1 = 3;
  hfdcan2.Init.NominalTimeSeg2 = 68;
  hfdcan2.Init.DataPrescaler = 2;
  hfdcan2.Init.DataSyncJumpWidth = 12;
  hfdcan2.Init.DataTimeSeg1 = 23;
  hfdcan2.Init.DataTimeSeg2 = 12;
  hfdcan2.Init.StdFiltersNbr = 1;
  hfdcan2.Init.ExtFiltersNbr = 0;
  hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
  if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN FDCAN2_Init 2 */

  sFilterConfig.IdType = FDCAN_STANDARD_ID;
  sFilterConfig.FilterIndex = 0;
  sFilterConfig.FilterType = FDCAN_FILTER_MASK;
  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
  sFilterConfig.FilterType = FDCAN_FILTER_RANGE;
  sFilterConfig.FilterID1 = 0x321;  // Spodnja meja
  sFilterConfig.FilterID2 = 0x7FF ;  // Zgornja meja
  
  if(HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK){ Error_Handler();}
  
  if(HAL_FDCAN_Start(&hfdcan2) != HAL_OK){ Error_Handler();}

  if(HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK){
	  Error_Handler();
  }
  
  // Optional: Activate error notifications (highly recommended for debugging)

  if(HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_MESSAGE_LOST | FDCAN_IT_ERROR_WARNING | FDCAN_IT_BUS_OFF, 0) != HAL_OK){ Error_Handler(); }


  /* USER CODE END FDCAN2_Init 2 */

}
And part of code that never executes:

Code: Select all

void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
	HAL_GPIO_TogglePin(LED_CAN_RX_GPIO_Port, LED_CAN_RX_GPIO_Port);

  if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET)
  {
    // Retrieve Rx messages from RX FIFO0 
    if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK) {Error_Handler();}
    if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK) { Error_Handler();}
  }
}

Additionally NVIC is initialized automaticaly:

Code: Select all

static void MX_NVIC_Init(void)
{
  /* FDCAN2_IT0_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(FDCAN2_IT0_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(FDCAN2_IT0_IRQn);
  /* FDCAN2_IT1_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(FDCAN2_IT1_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(FDCAN2_IT1_IRQn);
}
Thank you!

Re: UAEFI connection to STM32G474 VIA CAN

Posted: Tue Sep 02, 2025 10:33 pm
by langwadt
I've don't remember any problems getting CAN to work on an stm32g474

looked at this?: https://github.com/STMicroelectronics/STM32CubeG4/blob/master/Projects/STM32G474E-EVAL/Examples/FDCAN/FDCAN_Classic_Frame_Networking/Src/main.c#L296

for debug you might want to disable the filter to get all packets

if you have scope try transmitting to check if the clock and bit rate is setup correctly

Re: UAEFI connection to STM32G474 VIA CAN

Posted: Wed Sep 03, 2025 8:09 am
by franc
Thank you!
I will test it now. Signal on CAN line looks as it should.