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所在寄存器的值

 

你可能感兴趣的:(STM32)