你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm32的can多机通信设计
[复制链接]
manler
提问时间:2018-8-21 20:49 /
本人小白,最近刚开始学习can通信。求助大神,我想做一个基于stm32的惨多机通信程序,有3个can口发送数据,1个can口接受数据。接收用stm32实现。如果三个can口同时发送数据,会自动接受ID号最小的can口数据吗?如果三个can口以不同频率发送数据,接受时是不是在ID号小的can口发送数据间隔会接收到ID号大的can口发送的数据。另外,can的多机通信大致思路大神可否粗略介绍一下。谢谢谢谢!!!
赞
0
收藏
0
评论
7
分享
发布时间:2018-8-21 20:49
举报
请先
登录
后回复
7个回答
tjdee
回答时间:2018-8-21 21:59:51
a0a.1 32b0c
CAN 有优先级仲裁,优先级高的(ID)数据先发送,优先级低的后发送;多机通信根据数据的重要程度设置不同ID,(注意CAN的ID表征数据而不是机器本身;)数据传输时自然根据轻重缓急收发
评分
参与人数
1
蝴蝶豆
+3
收起
理由
zero99
+ 3
查看全部评分
赞
0
评论
回复
支持
反对
g921002
回答时间:2018-8-21 23:51:02
a0a.1 32b0c
這個用主從式架構去規劃比較好。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
feixiang20
回答时间:2018-8-22 00:26:51
a0a.1 32b0c
优先级传输数据,实现多点间的信息传递。要完成通信节点的设计。通信节点不仅可以和PC机进行信息交换,还可独立与其他各节点通信。你可以看看类似的资料,比如,STM32 CAN总线调试的一点心得总结,使用STM32F103做CAN的收发通信,stm32can多机通信源码,基于STM32的CAN总线通信设计,STM32的CAN通信实现(代码+图示)等等,会有所帮助。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
huangyanga
回答时间:2018-8-22 09:11:57
a0a.1 32b0c
1、不会自动接收最小的,只能软件都接收后自行判断;还可以配置接收过滤器,只接收指定ID的,或只接收指定大小范围的ID;
2、3个CAN以不同间隔发数据,能不能收到数据,还是要看接收过滤器的配置。
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
STM1024
回答时间:2018-8-22 12:12:23
a0a.1 32b0c
本帖最后由 stm1024 于 2019-5-4 11:12 编辑
0. 原则上,多机通讯一个CAN网络就足够了,CAN的报文采用的是广播的方式,理论上是不存在主从设备的,CAN标准中,报文没有明确指定接收的设备。但是SAE J1939中,应用层上可以在报文的ID中设计源地址和目标地址。便于报文过滤。通常有两到三个CAN网络是为了适应不同的需求,一些系统,把采集作为一路CAN,把控制作为另一路CAN,采集CAN的波特率会高一些,控制CAN的波特率会低一些。
1. ID本身属于CAN报文的仲裁场,技术上是使用的带冲突检测的载波侦听(CD/CSMA),在总线实现上是采用线与的方式,因此出现竞争时,仲裁的结果是ID较小的会胜出,而且之前传送的位都有效;仲裁失败的控制器,一般都可以捕获到这种错误,一些控制器还可以设置自动重发。
2. 你这里的三个CAN口,我猜你想说的是三个CAN设备,以不同频率(建议用周期)发送数据,只要你的主设备不过滤,都是会接收到的。实际上,任何一个设备发出的报文,都可能被其他设备的CAN模块接收到,至少可以送达CAN收发器,只是一些设备的CAN控制器做了报文过滤,只接收自己关心的那么几条报文,报文的过滤也是基于ID的,因此,在设计的时候,ID是一个值得深入规划的工作。一个合理设计的ID,有助于方便快捷地过滤报文。
3.通常,现在都是使用的CAN2.0B,即ID为29位的扩展帧,标准帧现在在汽车上用的很少,其他行业我就不知道,不过似乎在一些工控行业,基于标准CAN的CANOpen协议,还有大量的使用案例。此外,相对于之前的CAN协议中单帧只能传送8字节数据,后续的CAN-FD单帧报文能够传64字节数据。
评分
参与人数
1
蝴蝶豆
+4
收起
理由
zero99
+ 4
查看全部评分
赞
0
评论
回复
支持
反对
majianhui
回答时间:2018-8-23 16:08:06
a0a.1 32b0c
CAN是全双工,用一路总线进行多个报文的收发就可以了
评分
参与人数
1
蝴蝶豆
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
chenplay
回答时间:2019-5-3 07:19:34
a0a.1 32b0c
canopen协议
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
2、3个CAN以不同间隔发数据,能不能收到数据,还是要看接收过滤器的配置。
评分
查看全部评分
0. 原则上,多机通讯一个CAN网络就足够了,CAN的报文采用的是广播的方式,理论上是不存在主从设备的,CAN标准中,报文没有明确指定接收的设备。但是SAE J1939中,应用层上可以在报文的ID中设计源地址和目标地址。便于报文过滤。通常有两到三个CAN网络是为了适应不同的需求,一些系统,把采集作为一路CAN,把控制作为另一路CAN,采集CAN的波特率会高一些,控制CAN的波特率会低一些。
1. ID本身属于CAN报文的仲裁场,技术上是使用的带冲突检测的载波侦听(CD/CSMA),在总线实现上是采用线与的方式,因此出现竞争时,仲裁的结果是ID较小的会胜出,而且之前传送的位都有效;仲裁失败的控制器,一般都可以捕获到这种错误,一些控制器还可以设置自动重发。
2. 你这里的三个CAN口,我猜你想说的是三个CAN设备,以不同频率(建议用周期)发送数据,只要你的主设备不过滤,都是会接收到的。实际上,任何一个设备发出的报文,都可能被其他设备的CAN模块接收到,至少可以送达CAN收发器,只是一些设备的CAN控制器做了报文过滤,只接收自己关心的那么几条报文,报文的过滤也是基于ID的,因此,在设计的时候,ID是一个值得深入规划的工作。一个合理设计的ID,有助于方便快捷地过滤报文。
3.通常,现在都是使用的CAN2.0B,即ID为29位的扩展帧,标准帧现在在汽车上用的很少,其他行业我就不知道,不过似乎在一些工控行业,基于标准CAN的CANOpen协议,还有大量的使用案例。此外,相对于之前的CAN协议中单帧只能传送8字节数据,后续的CAN-FD单帧报文能够传64字节数据。
评分
查看全部评分
评分
查看全部评分