请问如何利用程序(STM32)判断CAN总线的波特率/通讯协议?

2019-07-14 14:55发布

利用STM32F103的CAN控制器可以和其他的节点进行通讯了。不过我承认,我自己对于CAN协议的理解还是太肤浅了。

现在的问题是,我的节点怎么知道CAN总线的波特率?怎么知道数据帧时标准格式,还是扩展格式的?
条件:总线的波特率是固定的几种,但是在节点加入前是不知道的。

我希望可以利用STM32的程序来在初始化的时候自动判断,现在的做法如下:
1、枚举固定的几种波特率,改变STM32的CAN控制器的初始化参数。
2、发送一组数据,查询是否发送成功,如果发送成功了,判断是否有数据接收,如果数据正确,那么就可以肯定是这种波特率及数据帧格式。
3、最多重复发送6次(间隔100ms)。
4、如果不是这种波特率/数据帧格式,那么更换下一种波特率再次测试。
5、如果枚举全部波特率都没有找到合适的协议,那么程序给出提示,进入死循环。

现在的状况是:如果固定协议,我的节点跑起来没有问题,可是采用上述这种方法来测试通讯波特率并不可行,程序最后就进入了死循环。
奇怪的是,如果用Debug方式跟踪的时候,有时候可以找到当前正在通讯的波特率。

哪位高手有好的建议?好的方法?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
andyseu
1楼-- · 2019-07-14 20:59
过来看看
UserMen
2楼-- · 2019-07-15 02:39
 精彩回答 2  元偷偷看……
hanlinceshi
3楼-- · 2019-07-15 02:42
andyseu 发表于 2018-12-28 17:04
过来看看

欢迎探讨。
hanlinceshi
4楼-- · 2019-07-15 05:37
mosen137 发表于 2018-12-28 16:48
CAN 的波特率   和是扩展帧   各个帧的  ID  都是在做项目之前   就已经有文给定的  ,  不然的话 ,就算你把波特率 试出来了    是不是扩展帧  ID   是多少    你也许试一辈子   都试不出来呀!!!!!!

这个不能用程序来自动侦测吗?
hanlinceshi
5楼-- · 2019-07-15 09:15
 精彩回答 2  元偷偷看……
maqyun
6楼-- · 2019-07-15 11:56

一周热门 更多>