OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6178|回复: 8

STM32 CAN通信的一个小问题

[复制链接]

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
发表于 2014-5-30 17:33:56 | 显示全部楼层 |阅读模式
5金钱
比如一个CAN总线上有3个节点A,B,C

现在C想接收A,B两个节点发送的数据,同时要分辨出是A还是B 发送的,如何辨别。

我个思考:
STM32中CAN设置的主要就是波特率和CAN过滤器。
通过对CAN过滤器的设置 ,可以实现C接收A和B的数据。问题是,当C接收了A,B的数据的时候能不能知道具体的数据帧是多少?
能不能知道接收到的数据的标识符(ID)具体是什么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
 楼主| 发表于 2014-5-30 18:20:58 | 显示全部楼层
对于上个问题换个问法:现在一个CAN节点将其过滤器设置为接收(11位标准ID)ID为111 1111 111*  这样的ID,那么接收到这样一个数据之后,能否知道这个数据帧中的“*”具体为多少?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-31 01:00:22 | 显示全部楼层
通过标识符列表模式,应该可以解决你的问题,读取数据后,根据标识符列表编号,就知道来自哪个设备了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
 楼主| 发表于 2014-5-31 10:46:13 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
如果采用标识符列表模式的话,不就是只能通过唯一的一个ID吗?
要想通过多个不同的ID的话应该要设置成标识符列表-屏蔽模式的把?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-31 22:31:09 | 显示全部楼层
回复【4楼】Leotsing:
-------------------------------
所以叫标识符列表啊.
可以将需要的列表出来
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
 楼主| 发表于 2014-6-1 10:37:02 | 显示全部楼层

这个问题的背景是这样的:
假设在小车的前后两端各有一个测距传感器,测到一定距离有物体就发出警报,警报通过CAN总线发送到一个控制MCU。
现在要判断是前面还是后面的:

我的2个想法:
法一:前后2个传感器发送的数据帧的ID是相同的,MCU接收这个ID,前、后传感器发送的数据帧的数据域中用一个位来分辨:0表示前面的,1表示后面的。

法二:前面传感器发送的数据帧的ID(假设)为01;后面传感器发送的数据帧的ID为02,接收MCU接收ID为0X的数据(即接收前后的数据),然后
去看接收的数据帧的ID中的X到底是1还是2还判断

我知道法一没什么问题,关键是法二能否实现红字部分?
回复

使用道具 举报

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
 楼主| 发表于 2014-6-1 10:39:02 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这个问题的背景是这样的:
假设在小车的前后两端各有一个测距传感器,测到一定距离有物体就发出警报,警报通过CAN总线发送到一个控制MCU。
现在要判断是前面还是后面的:

我的2个想法:
法一:前后2个传感器发送的数据帧的ID是相同的,MCU接收这个ID,前、后传感器发送的数据帧的数据域中用一个位来分辨:0表示前面的,1表示后面的。

法二:前面传感器发送的数据帧的ID(假设)为01;后面传感器发送的数据帧的ID为02,接收MCU接收ID为0X的数据(即接收前后的数据),然后
去看接收的数据帧的ID中的X到底是1还是2还判断。

我知道法一没什么问题,关键是法二能否实现?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-1 13:02:36 | 显示全部楼层
那就用标识符过滤模式.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

34

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2014-1-15
在线时间
0 小时
 楼主| 发表于 2014-6-1 13:41:51 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
好吧,我再研究下。谢谢前辈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 14:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表