你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
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字节数据。
评分
查看全部评分
评分
查看全部评分