2026-01-13 5:46 AM
Hi everyone,
I'm having a hard time with the FDCAN on a NUCLEO-H723ZG. I’ve tried several setups (external with transceivers, external loopback with wires), but I’ve stripped everything back to Internal Loopback mode on FDCAN1 to simplify things.
Current situation: I can actually see that the frame is sent successfully (no TX errors), but the receive interrupt/FIFO never triggers. It’s like the frame is going out into the void and not looping back into the RX FIFO.
I'm using the HAL drivers.
Here are the errors/status I'm getting via printf:
Full code is available here: https://github.com/mpek29/FDCAN-NUCLEO-H723ZG
Has anyone experienced this "TX works but RX fails" issue on the H7 series?
Thanks for any help! mpek29
2026-01-13 6:40 AM - edited 2026-01-13 6:41 AM
Hello @mpek29 and welcome to the ST community,
I detected many issues in your project:
1- You set the FDCAN peripheral to send Classic frame but you send an FDCAN frame with BRS OFF!:
hfdcan1.Init.FrameFormat = FDCAN_FRAME_CLASSIC; TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
TxHeader.FDFormat = FDCAN_FD_CAN;
It should be:
TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
2- You didn't set tRxFIFO0 element size nor the Standard filter: number:
hfdcan1.Init.StdFiltersNbr = 0;
hfdcan1.Init.RxFifo0ElmtsNbr = 0;
They should be set at least to 1:
hfdcan1.Init.StdFiltersNbr = 1;
hfdcan1.Init.RxFifo0ElmtsNbr = 1;
3- Avoid setting 1TQ for one of the time segments:
hfdcan1.Init.NominalTimeSeg2 = 1;
Try the following bit timing parameters @1Mb/s:
hfdcan1.Init.NominalPrescaler = 3;
hfdcan1.Init.NominalTimeSeg1 = 12;
hfdcan1.Init.NominalTimeSeg2 = 3;
Hope that helps.