调试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高波特率下数据场信号丢失】
推荐阅读
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 日常分享|共享充电宝方案原理,具体部件组成以及主控MUC参数
- #|ARM裸机开发(汇编LED灯实验(I.MX6UL芯片))
- STM32|STM32的四种IO输出模式
- STM32 远程升级(ISP / IAP)
- stm32|stm32f103can总线过滤器配置
- STM32CubeMX配置SDIO模式(非DMA方式)
- STM32|如何建一个STM32F030标准库工程模板
- STM32 时钟RCC相关配置参考stm32f10x_rcc.h
- STM32 NVIC