基于STM32的CAN通信網(wǎng)-----一種ID配置方法
分布式CAN通信網(wǎng)ID分配方法
在介紹本方法前,先構(gòu)建CAN通信網(wǎng)系統(tǒng)模型:只有一個管理中心節(jié)點,其他均為從節(jié)點。主節(jié)點可與所有從節(jié)點之間相互通信,從節(jié)點之間不相互通信。CAN通信網(wǎng)采用網(wǎng)橋擴展方式增大網(wǎng)絡(luò)中的節(jié)點。
報文幀格式
幀信息
IDE=1
RTR=0
X
X
DLC
擴展幀
遠(yuǎn)程幀
保留位
幀數(shù)據(jù)部分長度(不大于8)
幀標(biāo)
識符
ID28
ID27
ID26
ID25
ID24
ID24
ID22
ID21
DestMACID(目標(biāo)節(jié)點編碼)
ID20
ID19
ID18
ID17
ID16
ID15
ID14
ID13
xxxxxxx xxxxxxx
ID12
ID11
ID10
ID9
ID8
ID7
ID6
ID5
SrcMACID(源節(jié)點編碼)
ID4
ID3
ID2
ID1
ID0
X
X
X
0
保留位
當(dāng)使用擴展幀進行數(shù)據(jù)傳輸時,擴展幀ID由STID+EXID組成。例如,在STM32中設(shè)置ExtID=0X1234時,則
CAN_FilterIdHigh=0x0000,CAN_FilterIdLow=(0x1234)X8+4= 0x91A4;
如果設(shè)置ExtID=0X5678,則
CAN_FilterMaskIdHigh=(u32(0x5678)X8/(0x10000)=0x0002; CAN_FilterMaskIdLow=(0x5678)X8+4=0xB3C4;(溢出,截高位,剩下的就是這個數(shù))。
為方便計算,我們把ID最后一位直接置為0。ID28~ID01這28位平分,前14位為DestMACID(目標(biāo)節(jié)點),后14位為SrcMACID(源節(jié)點)。對于前14位,ID28~ID22作為網(wǎng)橋標(biāo)號,ID21~ID15作為子網(wǎng)內(nèi)編號。后14位采用相同編號方式。
其中,地址0000000/0000000設(shè)置主地址
網(wǎng)橋編號為, 0000001/xxxxxxx~1101110/xxxxxxx,也就是1~110
網(wǎng)橋內(nèi)子節(jié)點編號為xxxxxxx/0000001~xxxxxxx/1101110,也就是1~110
規(guī)定xxxxxxx/0000000,為網(wǎng)橋內(nèi)廣播地址。廣播地址,其中,xxxxxxx!=0000000。這主要是為了管理中心向各個從節(jié)點采集數(shù)據(jù)(心跳連接)時使用的。通過網(wǎng)橋內(nèi)廣播,則管理中心最少只需要發(fā)送110次查詢信息,就可以獲取所有井蓋終端的井蓋當(dāng)前狀態(tài)。
例如,某節(jié)點地址為0000010/0000100,則表示為網(wǎng)橋2內(nèi)的第4個節(jié)點
如果整個29位的ID設(shè)置為0000000/0000000 0000010/0000100 0,則表示數(shù)據(jù)從網(wǎng)橋2內(nèi)的第4個節(jié)點,發(fā)送至管理中心;如果整個29位的ID設(shè)置為0000010/0000100 0000000/0000000 0,則表示數(shù)據(jù)從管理中心,發(fā)送至網(wǎng)橋2內(nèi)的第4個節(jié)點。注意,源地址和目的地址必須有一個是管理中心的地址,因為各個井蓋節(jié)點之間不相互傳送數(shù)據(jù)。