STM32H743 CANFD未配置TDC导致在1M_5M高波特率下数据场信号丢失

调试STM32H743的CANFD时,官方参考代码里面的波特率配置为1M_4M,并且采样点数不满足要求,后面通过配置仲裁场为1M,数据场为5M,示波器观察发现丢失数据场,只有仲裁场,后面查看了MCP2517的配置里面,有一个TDC参数对应STM32H743的HAL_FDCAN_ConfigTxDelayCompensation(发送延迟补偿),使能之后,配置TDC值。

HAL_FDCAN_EnableTxDelayCompensation(&hfdcan1); //使能hfdcan1的TDC HAL_FDCAN_ConfigTxDelayCompensation(&hfdcan1,TdcOffset ,TdcFilter); //配置hfdcan1 //TdcOffset = DataTimeSeg1*DataPrescaler //TdcFilter的配置可以是0,我暂时配置为和TDCTdcOffset 一致

其中DataTimeSeg1和DataPrescaler的配置如下:可以得到TdcOffset =1*11=11
hfdcan1.Init.NominalPrescaler = 1; hfdcan1.Init.NominalSyncJumpWidth = 12; hfdcan1.Init.NominalTimeSeg1 = 67; hfdcan1.Init.NominalTimeSeg2 = 12; hfdcan1.Init.DataPrescaler = 1; hfdcan1.Init.DataSyncJumpWidth = 4; hfdcan1.Init.DataTimeSeg1 = 11; hfdcan1.Init.DataTimeSeg2 = 4;

然后可以通过查看TDC所在寄存器的值,可以查看TDC是否设置成功,设置失败DBTP=0x00000E33,设置成功DBTP=0x00800E33,具体DBTP寄存器的各位请查看STM32H743数据手册
FDCAN_ProtocolStatus_FDCAN1=HAL_FDCAN_GetProtocolStatus(&hfdcan1,&Status_FDCAN1); //查看TDC所在寄存器的值

【STM32H743 CANFD未配置TDC导致在1M_5M高波特率下数据场信号丢失】

    推荐阅读