STM32的CAN总线调试——与以太网转CAN联调的小问题

发布者:智慧启迪最新更新时间:2019-10-08 来源: eefocus关键字:STM32  CAN  总线调试  以太网  CAN联调 手机看文章 扫描二维码
随时随地手机看文章

现象:单片机与服务器双向通信,服务器发一次数据等待单片机响应,响应完成继续发送,没有响应等待1秒再次发送;单片机向服务器发送数据同理。测试进行了几万次数据交流,发现一个规律:服务器向单片机发送的数据单片机都能够接收,而且正常回应,服务器也能够全部收到,例如服务器发了10000次数据,单片机就能够收到10000次数据也能响应服务器10000次。而单片机向服务器发送的请求,服务器却不一定能够全部收到,但是只要服务器收到的请求,都能够做出响应,比如单片机发出了10000次数据,但是服务器却直接受到了9990次,也给单片机响应了9990次,丢了10次。


遇到这个问题后怎么想也想不明白,为什么单片机响应服务器的数据一个没丢,但是请求服务器的数据却会丢呢?


调试过程:将测试次数减少,只要发生丢失数据的情况就立即停止。于是单片机与服务器继续通信,在丢失第一个数据的时候停下来查看状态,发现单片机发送请求的同时,服务器也在发送请求。那么为什么单片机的请求却失败后没有再次发送?回到单片机的代码当中发现在CAN模块初始化的时候禁止自动重发的功能为使能状态,也就是单片机在发送数据的时候,只发送一次,即使发送失败了也不会去管,而是返回发送完成的状态。所以,单片机在与服务器端用的以太网转CAN模块的较量当中,丢掉了数据,服务器发送成功。


那么,还有一个问题,就是为什么单片机给服务器发的响应都会成功?这与上层代码的逻辑有关,因为服务器向单片机发送完请求后会等待单片机响应,此时的总线只有单片机在占用,所以单片机发的相应数据会每次都成功。


后来,使用了单片机的自动重发功能后再次测试,发现单片机发出的请求没有发生丢包的现象。


查阅STM32的数据手册,发现这个自动重发功能如果启用,当单片机检测到发送数据失败后会一直重发,直到成功。而如果不用这个功能,则单片机的CAN控制器只发一次数据,不去换结果如何。

关键字:STM32  CAN  总线调试  以太网  CAN联调 引用地址:STM32的CAN总线调试——与以太网转CAN联调的小问题

上一篇:STM32 CAN 波特率、采样点设置
下一篇:STM32 中 CAN进入错误回调函数后无法接收问题(HAL库)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved