cancel
Showing results for 
Search instead for 
Did you mean: 

STM32G491 FDCAN2 Receiving Issue

YY_John
Visitor

Hi,

I am using STM32G491 with 2 FDCAN channels. FDCAN1 is working normally for sending and receiving data. FDCAN2 is sending out data normally, but it can't receive any data, not able to generate any receiving interrupts. Here is the initialization code. Can anyone have any ideas what could be the issue? Thanks. 

void MX_FDCAN2_Classic_Init(void)

{

 

FDCAN_FilterTypeDef sFilterConfig;

__HAL_RCC_FDCAN_CLK_ENABLE();

 

 

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;

//CAN 500kbps

hfdcan2.Init.NominalPrescaler = 16;

hfdcan2.Init.NominalSyncJumpWidth = 1;

hfdcan2.Init.NominalTimeSeg1 = 2;

hfdcan2.Init.NominalTimeSeg2 = 2;

hfdcan2.Init.DataPrescaler = 1;

hfdcan2.Init.DataSyncJumpWidth = 1;

hfdcan2.Init.DataTimeSeg1 = 1;

hfdcan2.Init.DataTimeSeg2 = 1;

hfdcan2.Init.StdFiltersNbr = 0;

hfdcan2.Init.ExtFiltersNbr = 0;

hfdcan2.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;

if (HAL_FDCAN_Init(&hfdcan2) != HAL_OK)

{

Error_Handler();

}

 

/* Configure the CAN Filter */

sFilterConfig.IdType = FDCAN_STANDARD_ID;

sFilterConfig.FilterIndex = 1;

sFilterConfig.FilterType = FDCAN_FILTER_RANGE;

sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;

sFilterConfig.FilterID1 = 0x321;

sFilterConfig.FilterID2 = 0x7FF;

 

if (HAL_FDCAN_ConfigFilter(&hfdcan2, &sFilterConfig) != HAL_OK) {

Error_Handler();

}

 

if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK) {

Error_Handler();

}

 

// 2. Assign the event to a specific interrupt line (Line 0 is default)

HAL_FDCAN_ConfigInterruptLines(&hfdcan2, FDCAN_IT_GROUP_RX_FIFO0, FDCAN_INTERRUPT_LINE0);

HAL_FDCAN_ConfigInterruptLines(&hfdcan2, FDCAN_IT_GROUP_RX_FIFO1, FDCAN_INTERRUPT_LINE1);

// 3. Enable the global FDCAN Line 0

//HAL_FDCAN_ConfigInterruptLines(&hfdcan2, FDCAN_INTERRUPT_LINE0);

 

// 4. Activate the specific notification (e.g., RX FIFO 0 New Message)

HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0);

HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO1_NEW_MESSAGE, 0);

//if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK) {

//Error_Handler();

//}

 

NVIC_SetPriority(FDCAN2_IT0_IRQn, 2);

NVIC_EnableIRQ(FDCAN2_IT0_IRQn);

 

NVIC_SetPriority(FDCAN2_IT1_IRQn, 2);

NVIC_EnableIRQ(FDCAN2_IT1_IRQn);

 

/* Configure Transmission process */

FDCAN2_TxHeader.Identifier = 0x321;

FDCAN2_TxHeader.IdType = FDCAN_STANDARD_ID;

FDCAN2_TxHeader.TxFrameType = FDCAN_DATA_FRAME;

FDCAN2_TxHeader.DataLength = FDCAN_DLC_BYTES_8;

FDCAN2_TxHeader.BitRateSwitch = FDCAN_BRS_OFF;

FDCAN2_TxHeader.FDFormat = FDCAN_CLASSIC_CAN;

}

 

1 REPLY 1
Karl Yamashita
Principal

In the future, use the </> to insert code so it's properly formatted.

Attach your IOC file.

If a reply has proven helpful, click on Accept as Solution so that it'll show at top of the post.
CAN Jammer an open source CAN bus hacking tool
CANableV3 Open Source