[help needed] UAEFI connection to STM32G474 VIA CAN

Your chance to introduce yourself and your vehicle
Post Reply
User avatar
franc
Posts: 2
Joined: Tue Feb 18, 2025 12:05 pm
Location: Novo mesto

UAEFI connection to STM32G474 VIA CAN

Post 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!
You do not have the required permissions to view the files attached to this post.
langwadt
Posts: 4
Joined: Tue Mar 04, 2025 2:35 pm

Re: UAEFI connection to STM32G474 VIA CAN

Post 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
User avatar
franc
Posts: 2
Joined: Tue Feb 18, 2025 12:05 pm
Location: Novo mesto

Re: UAEFI connection to STM32G474 VIA CAN

Post by franc »

Thank you!
I will test it now. Signal on CAN line looks as it should.
Post Reply