STM32
直播中

哈哈哈

10年用户 936经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

STM32G474发送CANFD数据出现异常的原因?

环境STM32g474re,加上主板,CAN总线上一共有9个节点,其中有一个节点是CAN扩展帧协议,其他为CANFD BRS开启,标准帧
配置:仲裁域 1M 80%,数据域 5M 75%,开启自动重传
问题现象通信过程,长时间测试,偶现主板无法往总线上刷数据,我们是一主多从方式,主板依次轮询每个节点的信息,一问一答式,总线上测到无信号,CAN寄存器看到无bus-off,DLEC 和LEC错误码都为7,TEC为0,REC为1,TXFIFO为满
尝试手段
CAN H和CAN L短路,这样会导致bus off,和我们看到的寄存器状态不匹配,排除;
把主板的CAN从总线断路,TXFIFO为满,应该是开了重传,fifo数据一直在尝试重发,新的数据进不来。这样符合看到问题时的寄存器状态,但是重新接回总线,异常能够恢复,FIFO恢复正常,但是我们的问题是出现后,一直无法恢复,通过重新初始化CAN能够恢复,所以不像是CAN总线接触不良。
问题:所以还有什么情况会造成FIFO一直满的情况,还发送不出数据到总线



回帖(2)

温暖镜头

2024-5-30 16:12:39

1. 硬件问题:请检查CAN总线上的所有节点的硬件连接,包括CAN收发器、电阻、电缆等。确保所有连接都正确无误,没有损坏或接触不良的情况。

2. 软件配置问题:请检查STM32G474的CANFD配置是否正确。确保所有节点的配置相同,包括仲裁域、数据域、波特率等。同时,检查CANFD BRS(可变波特率)是否已正确配置。

3. 通信协议问题:由于您的系统中有一个节点使用CAN扩展帧协议,而其他节点使用CANFD BRS,这可能导致通信过程中出现不兼容或冲突。请确保所有节点之间的通信协议兼容。

4. 错误处理:您提到CAN寄存器中的DLEC和LEC错误码都为7,TEC为0,REC为1。这可能表明存在一些错误,但不足以触发bus-off。请检查STM32G474的错误处理逻辑,确保在出现错误时能够正确处理并恢复通信。

5. TXFIFO满:您提到尝试将CAN H和CAN L短路,导致bus off,这与寄存器状态不匹配。这可能表明TXFIFO满的问题。请检查STM32G474的CAN驱动程序,确保在发送数据时能够正确处理TXFIFO满的情况。

6. 干扰问题:CAN总线可能受到外部电磁干扰,导致通信异常。请检查CAN总线周围的环境,确保没有强电磁干扰源。同时,可以考虑使用屏蔽电缆和适当的接地措施来减少干扰。

7. 软件逻辑问题:请检查您的一问一答式通信逻辑,确保在轮询每个节点时,主板能够正确发送请求并接收响应。同时,检查是否有可能存在死锁或资源竞争的情况。

综上所述,您可以从硬件、软件配置、通信协议、错误处理、TXFIFO满、干扰问题和软件逻辑等方面进行排查,以找到导致STM32G474发送CANFD数据异常的原因。希望这些建议对您有所帮助。
举报

jf_13641097

2024-8-5 11:19:42
楼主,最后发现是什么问题,有找到吗?我也是这个问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分