你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
高级放牛娃 提问时间:2016-12-29 21:32 /
利用STM32F103的CAN控制器可以和其他的节点进行通讯了。不过我承认,我自己对于CAN协议的理解还是太肤浅了。

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

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

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

哪位高手有好的建议?好的方法?

收藏 3 评论25 发布时间:2016-12-29 21:32

举报

25个回答
andypanfan 回答时间:2016-12-30 09:20:55
CAN 的波特率   和是扩展帧   各个帧的  ID  都是在做项目之前   就已经有文给定的  ,  不然的话 ,就算你把波特率 试出来了    是不是扩展帧  ID   是多少    你也许试一辈子   都试不出来呀!!!!!!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

任风吹吹 回答时间:2016-12-30 16:32:32
我想是否可以利用应答域:

大家都知道,CAN节点在发送报文时,是一边发送一边检测总线状态的,一个CAN节点在CAN网络上发送数据,如果有其他节点接收,则会在报文的应答域拉低(应答域位于仲裁域后边),以此表示“我已经接收了这报文”,发送节点在检查到发出去的报文的应答域有其他节点反应,就表示也就表示发送的信息有其他节点成功接收,也就是说,发送节点发送结果为成功,这个就是CAN与其他总线不同的地方,CAN节点发送数据后是知道是否发送成功的,不像USART,I2C,SPI,I2S那样,发出数据后发送方完全不知道对方是否成功接收,只有在对方再回复一条协议上或者应用层上的数据才知道“原来之前发送的数据有其他人接收到”,这个是CAN不一样的地方,知道这个后,我想是否可以通过尝试各种波特率发送报文,若发送成功,则表示这个波特率就是正确的。

当然这个只是我的推测,实际应用还得看楼主验证结果。。。勿喜莫喷!

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

jackten 回答时间:2016-12-30 09:17:28
过来看看
奏奏奏 回答时间:2016-12-30 09:52:30
我觉得CAN的波特率跟串口的波特率相似,有节点回复才能知道设置是否正确。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

高级放牛娃 回答时间:2016-12-30 11:18:24

欢迎探讨。
高级放牛娃 回答时间:2016-12-30 11:18:46
andypanfan 发表于 2016-12-30 09:20
CAN 的波特率   和是扩展帧   各个帧的  ID  都是在做项目之前   就已经有文给定的  ,  不然的话 ,就算你 ...

这个不能用程序来自动侦测吗?
高级放牛娃 回答时间:2016-12-30 11:19:43
奏奏奏 发表于 2016-12-30 09:52
我觉得CAN的波特率跟串口的波特率相似,有节点回复才能知道设置是否正确。 ...

初步的想法就是这样的:发送出去信息,然后等待回复,可是很郁闷,为什么固定协议的时候都好说,可是到了自动侦测的时候就不好用了。
5265325 回答时间:2016-12-30 16:09:42
darren_liu 回答时间:2016-12-30 16:30:45
循环发送等回复?
任风吹吹 回答时间:2016-12-30 16:45:42
本帖最后由 任风吹吹 于 2016-12-30 16:47 编辑

我回复的内容不见了。。。?还在审核中....?
任风吹吹 回答时间:2016-12-30 16:59:40
斑竹能帮我找回来否?
reply.png

高级放牛娃 回答时间:2016-12-31 21:48:06
darren_liu 发表于 2016-12-30 16:30
循环发送等回复?

我目前大概就是这么个思路
高级放牛娃 回答时间:2016-12-31 21:49:39
任风吹吹 发表于 2016-12-30 16:32
我想是否可以利用应答域:

大家都知道,CAN节点在发送报文时,是一边发送一边检测总线状态的,一个CAN节点 ...

这个~~~~~说实在的,对于我来说,有点难度,怎么去验证呢?我想想看。

不过,多谢你的解答。
中山无雪 回答时间:2016-12-31 22:20:13
任风吹吹 发表于 2016-12-30 16:32
我想是否可以利用应答域:

大家都知道,CAN节点在发送报文时,是一边发送一边检测总线状态的,一个CAN节点 ...

这个思路应该可以
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版