CAN通信和唯一ID的困惑?

[复制链接]
1975|12
 楼主| gaobq 发表于 2019-11-4 14:42 | 显示全部楼层 |阅读模式
使用STM32F103+CAN通信,多个同样的板子都挂载CAN总线上,同样的程序和功能;上位机监控整个总线通信。
当有个板子发出信息时,上位机如何知道是那个板子发出的?
我们知道CAN的帧ID有 11bit 和29 bit 两种,数据位也只有8字节。
STM32F103本身具备唯一ID,但长度是12字节(96位)。
如果取唯一ID中的4字节作为设备ID,有ID重复的风险,另外12字节的唯一ID也不知道规律,不知道取哪些字节合适;
想过找个字节数少点的唯一ID元件,也没有找到;
如果每个板子都启用前配置一个ID号,写入FLASH中,难度和方案都可以,就是增加了一配置工作(联线、写入、ID号的维护)
请各位高手给我出出主意,如何处理这个问题:上位机判断一帧数据是谁发出来的,谢谢啦!
tyw 发表于 2019-11-4 14:55 | 显示全部楼层
 楼主| gaobq 发表于 2019-11-4 15:25 | 显示全部楼层
谢谢tyw,传经送宝!
icecut 发表于 2019-11-4 17:33 | 显示全部楼层
哈哈哈, 我们都是搞个自动的配置管理器. 大家都把自己的唯一id报上来,我再给他们重新搞一个短id对应, 没必要人工配置.自动处理就好了.
haoyupei 发表于 2019-11-4 17:35 | 显示全部楼层
你的问题我们以前的项目正好涉及到,通过在扩展id的29位上做**,29位可以划分权限,区别类型,定义优先级,上位机收到id按照格式解析,可以准确定位下位机
ningling_21 发表于 2019-11-4 17:44 | 显示全部楼层
STM32发送自身ID号到上位机,上位机再根据ID号给STM32板编通信地址,类似USB设备枚举(却很简单)
R2D2 发表于 2019-11-4 19:51 | 显示全部楼层
不加配置你知道是那块板子发出来的数据???
Prry 发表于 2019-11-4 22:50 | 显示全部楼层
以前公司每个板子挂一个DS18B20,用它的唯一序列号

评论

土豪  发表于 2019-11-5 14:28
Ryanhsiung 发表于 2019-11-5 08:48 | 显示全部楼层
你是想做无需设置,没有办法。 ?? 网络里一下挂进来10个节点,我们怎么知道那个节点是那个节点呢?   
正常做法就是搞个设置ID的功能(或者拨码的)   ,
jackyhuang1988 发表于 2019-11-5 10:13 | 显示全部楼层
烧录的时候烧一个序列号进去就行了。程序里把序列号读出来
 楼主| gaobq 发表于 2019-11-5 13:56 | 显示全部楼层
向各位热心的朋友汇报一下,我最终选择了增加配置操作的方法,每块板子使用前独立挂到CAN接口上,使用软件写入一个8字节的序列号。序列号存储在FLASH片内存储区的最后一页。取序列号中的最后两个字节作为设备自身ID,这个ID嵌入发送数据时的ExtID中。
jazzyfox 发表于 2019-11-6 13:58 | 显示全部楼层
Prry 发表于 2019-11-4 22:50
以前公司每个板子挂一个DS18B20,用它的唯一序列号

这种办法也可以啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

831

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部