×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-26 发布时间:
|

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


关键字:STM32  CAN通信网  ID配置 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址