最近遇到一个问题,之前一直在用的一个设备一直都正常,今天被反馈说通讯出现错误帧,然而低波特率下工作正常,当变速波特率达到5M时就无法进行通讯了,观察代码没有出现问题,抓波形发现CAN波形的TX与RX不同步,需要对CAN报文进行延时补偿,具体代码如下:
FDCAN_ClkCalUnitTypeDef clkCalUnit;
clkCalUnit.ClockDivider = FDCAN_CLOCK_DIV1;
clkCalUnit.ClockCalibration = FDCAN_CLOCK_CALIBRATION_DISABLE;
//clkCalUnit.CalFieldLength
HAL_FDCAN_ConfigClockCalibration(&hfdcan1,&clkCalUnit);
//Add Delay Compensation
HAL_FDCAN_EnableTxDelayCompensation(&hfdcan1);
uint32_t tdcValue = hfdcan1.Init.DataTimeSeg1;
HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan1, tdcValue, 1);
将这段代码添加到FDCAN初始化时HAL_FDCAN_Start上方即可。
希望能够帮到你。