基于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个节点。注意,源地址和目的地址必须有一个是管理中心的地址,因为各个井盖节点之间不相互传送数据。