基于STM32的CAN通信网-----一种ID配置方法

分布式CAN通信网ID分配方法

   在介绍本方法前,先构建CAN通信网系统模型:只有一个管理中心节点,其他均为从节点。主节点可与所有从节点之间相互通信,从节点之间不相互通信。CAN通信网采用网桥扩展方式增大网络中的节点。

报文帧格式

帧信息

IDE=1

RTR=0

X

X

DLC

扩展帧

远程帧

保留位

帧数据部分长度(不大于8)

 

 

 

 

帧标

识符

ID28

ID27

ID26

ID25

ID24

ID24

ID22

ID21

DestMACID(目标节点编码)

ID20

ID19

ID18

ID17

ID16

ID15

ID14

ID13

xxxxxxx xxxxxxx

 

ID12

ID11

ID10

ID9

ID8

ID7

ID6

ID5

SrcMACID(源节点编码)

ID4

ID3

ID2

ID1

ID0

X

X

X

 

0

保留位


当使用扩展帧进行数据传输时,扩展帧ID由STID+EXID组成。例如,在STM32中设置ExtID=0X1234时,则

 CAN_FilterIdHigh=0x0000,CAN_FilterIdLow=(0x1234)X8+4= 0x91A4;

如果设置ExtID=0X5678,则

  CAN_FilterMaskIdHigh=(u32(0x5678)X8/(0x10000)=0x0002;     CAN_FilterMaskIdLow=(0x5678)X8+4=0xB3C4;(溢出,截高位,剩下的就是这个数)。

为方便计算,我们把ID最后一位直接置为0。ID28~ID01这28位平分,前14位为DestMACID(目标节点),后14位为SrcMACID(源节点)。对于前14位,ID28~ID22作为网桥标号,ID21~ID15作为子网内编号。后14位采用相同编号方式。

  其中,地址0000000/0000000设置主地址

  网桥编号为, 0000001/xxxxxxx~1101110/xxxxxxx,也就是1~110

  网桥内子节点编号为xxxxxxx/0000001~xxxxxxx/1101110,也就是1~110

  规定xxxxxxx/0000000,为网桥内广播地址。广播地址,其中,xxxxxxx!=0000000。这主要是为了管理中心向各个从节点采集数据(心跳连接)时使用的。通过网桥内广播,则管理中心最少只需要发送110次查询信息,就可以获取所有井盖终端的井盖当前状态。

  例如,某节点地址为0000010/0000100,则表示为网桥2内的第4个节点

  如果整个29位的ID设置为0000000/0000000 0000010/0000100 0,则表示数据从网桥2内的第4个节点,发送至管理中心;如果整个29位的ID设置为0000010/0000100 0000000/0000000  0,则表示数据从管理中心,发送至网桥2内的第4个节点。注意,源地址和目的地址必须有一个是管理中心的地址,因为各个井盖节点之间不相互传送数据。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值