STM32H723的FDCAN接收时DataLength值异常问题求助
STM32H723 FDCAN接收时DataLength值异常的解决方案
在STM32H723上使用FDCAN接收报文,调用HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &CAN1RxHeader, CAN1Rx_buffer);后,CAN1RxHeader.DataLength返回极大值而非实际报文字节数,可通过以下步骤排查解决:
确认FDCAN初始化配置
确保初始化FDCAN时正确配置了数据长度码(DLC)的解析规则:- 传统CAN模式下,DLC直接对应0-8字节;
- 若启用CAN FD扩展DLC(支持0-64字节),需在
FDCAN_InitTypeDef中正确配置相关参数,接收时需按CAN FD的DLC编码规则转换DataLength为实际字节数。
正确解析DataLength字段
FDCAN的DataLength并非直接等于报文字节数,需遵循CAN FD的DLC映射标准:DLC值 实际字节数 0-7 0-7 8 8 9 12 10 16 11 20 12 24 13 32 14 48 15 64 若使用传统CAN帧,
DataLength超过8则为异常;CAN FD帧必须按上述映射转换才能得到真实报文长度。初始化RxHeader结构体
调用HAL_FDCAN_GetRxMessage前,务必用memset(&CAN1RxHeader, 0, sizeof(CAN1RxHeader));等方式初始化结构体,未初始化的成员可能携带随机垃圾值,导致DataLength显示异常。排查硬件与总线状态
检查CAN收发器硬件连接是否正常,总线是否存在干扰或错误帧。总线异常会导致FDCAN控制器接收错误帧数据,进而解析出错误的DataLength值。
内容的提问来源于stack exchange,提问作者Archon
相关产品推荐
相关产品推荐

