打印
[STM32G4]

STM32G431的CAN通信老丢数据咋回事?

[复制链接]
875|55
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Pulitzer|  楼主 | 2025-3-11 09:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN滤波器参数该怎么设置?仲裁机制是不是得特别注意?有可能是数据接收太慢导致缓冲区溢出吗?

使用特权

评论回复
沙发
七毛钱| | 2025-3-11 12:39 | 只看该作者
CAN总线线路是否存在断线、短路或接触不良?

使用特权

评论回复
板凳
海滨消消| | 2025-3-11 14:20 | 只看该作者
波特率不匹配

使用特权

评论回复
地板
duo点| | 2025-3-11 16:00 | 只看该作者
可能是周围存在电磁干扰

使用特权

评论回复
5
内政奇才| | 2025-3-11 17:23 | 只看该作者
检查是否存在其他电子设备或电源线对CAN总线产生干扰。

使用特权

评论回复
6
515192147| | 2025-3-11 19:21 | 只看该作者
本帖最后由 515192147 于 2025-3-21 09:54 编辑

  这个 一定要 有         //NART(No automatic retransmission)报文自动重传功能
                //=ENABLE;禁止报文自动重传,=DISABLE,发送失败,会自动重传,直到成功  !!!!!!!!!
                //DISABLE代表的是使用自动重传的功能,ENABLE是代表不使用自动重传的功能
                //发现在不使用自动重传的功能时,如果由于总线竞争导致发送失败,数据就丢掉了。
                //所以在不是一应一答的环境中使用CAN的时候,建议开启自动重传功能。

也有可能是 负载太高,堵路了:
这个问题就好像:我一秒钟产生1Mbits的数据,不压缩的情况下,我如何通过波特率500kbps的链路把它发出去?
答案就是发不出去。
CAN总线上应当总会有空闲时间,让那些低优先级的报文能发出去。
如果始终发不出去,只是那些高优先级的报文就把总线负载干到了100%,只能说明你的系统设计有问题。
资源不足的问题,要么是升级系统,要么是砍需求。
提高CAN总线波特率,使用CAN FD,删掉一些不必要的节点和通信数据.....
这是你需要做的事情,CAN总线不操这个心。


下面是 我们在电厂的一个案例,整个系统基本没有丢包:
下图为1个大型电厂的温度采集系统,分2路CANWeb总线,每路带62个8路热电偶CNW_IO模块,共992个温度采集点,项目使用4片GD32F427VE、124片GD32F305RC芯片, 采集系统CAN总线冗余,网关模块冗余,通过2路冗余Profibus DP 送电厂DCS,数据刷新周期小于500毫秒。


项目源程序见:
https://bbs.21ic.com/icview-3335470-1-1.html



使用特权

评论回复
7
麻花油条| | 2025-3-11 20:59 | 只看该作者
可能是滤波器设置不合适

使用特权

评论回复
8
豌豆爹| | 2025-3-11 22:00 | 只看该作者
状态机配置错误,可能会导致数据接收异常。

使用特权

评论回复
9
onlycook| | 2025-3-11 23:00 | 只看该作者
尝试优化CPU资源分配或调整任务优先级

使用特权

评论回复
10
usysm| | 2025-3-12 17:31 | 只看该作者
终端电阻问题              

使用特权

评论回复
11
alvpeg| | 2025-3-12 18:11 | 只看该作者
检查 CAN 总线两端是否正确连接了 120Ω 的终端电阻

使用特权

评论回复
12
jonas222| | 2025-3-12 18:45 | 只看该作者
CAN收发器或MCU损坏,可能导致通信异常。

使用特权

评论回复
13
youtome| | 2025-3-12 19:14 | 只看该作者
减少外部电磁干扰。              

使用特权

评论回复
14
biechedan| | 2025-3-12 19:34 | 只看该作者
CAN总线线路故障,如断线、短路或接触不良。

使用特权

评论回复
15
rosemoore| | 2025-3-12 19:48 | 只看该作者
如果CAN总线上消息过多,或者多个节点尝试同时发送,在仲裁阶段可能出现错误。

使用特权

评论回复
16
lzmm| | 2025-3-12 20:42 | 只看该作者
优化通信协议,减少不必要的数据传输

使用特权

评论回复
17
wilhelmina2| | 2025-3-12 21:25 | 只看该作者
如果 CAN 总线的数据传输速率过高,而 STM32G431 的接收缓冲区处理速度跟不上,会导致接收缓冲区溢出,从而丢失一些数据。

使用特权

评论回复
18
geraldbetty| | 2025-3-12 21:55 | 只看该作者
在CAN总线中,ID值较小的帧具有更高的优先级。发送ID较大的帧可能因仲裁失败而丢帧

使用特权

评论回复
19
tifmill| | 2025-3-12 22:16 | 只看该作者
对 CAN 总线进行屏蔽处理,使用屏蔽线并将屏蔽层可靠接地。

使用特权

评论回复
20
sesefadou| | 2025-3-14 10:05 | 只看该作者
接收缓冲区过小或处理缓冲区数据的速度跟不上接收速度。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

4373

帖子

0

粉丝