語(yǔ)言生動(dòng)形象,讓人一看就懂。
STM32 CAN發(fā)送和接收過(guò)濾原理
通過(guò)對(duì) CANBUS 協(xié)議的理解 , 我們知道 : CAN 總線上的節(jié)點(diǎn)接收或發(fā)送數(shù)據(jù)都是以幀為單位的 ! ! ! CAN 協(xié)議規(guī)定了好幾種幀類(lèi)型,但是對(duì)于我們應(yīng)用來(lái)說(shuō),只有數(shù)據(jù)幀和遠(yuǎn)程幀可以通過(guò)軟件編程來(lái)控制 。 ( 其他幾種幀都是由 CAN 控制器硬件實(shí)現(xiàn)的 , 我們想管也管不了 ) 。而數(shù)據(jù)幀和遠(yuǎn)程幀最大的區(qū)別在于 : 遠(yuǎn)程幀沒(méi)有數(shù)據(jù)域 。 數(shù)據(jù)幀分為標(biāo)準(zhǔn)數(shù)據(jù)幀和擴(kuò)展數(shù)據(jù)幀,它們之間最大的區(qū)別在于:標(biāo)識(shí)符 (ID) 長(zhǎng)度不同(標(biāo)準(zhǔn)幀為 11 位,擴(kuò)展幀為 29 位 ) 。為了能更好地理解下面的內(nèi)容,讓我們先來(lái)回憶一下標(biāo)準(zhǔn)數(shù)據(jù)幀是什么樣子的:
0.png (197.17 KB, 下載次數(shù): 172)
下載附件
2018-4-16 04:32 上傳
0.jpg (28.05 KB, 下載次數(shù): 157)
下載附件
2018-4-16 04:33 上傳
0.jpg (83.7 KB, 下載次數(shù): 156)
下載附件
2018-4-16 04:33 上傳
0.png (184.39 KB, 下載次數(shù): 144)
下載附件
2018-4-16 04:33 上傳
1 :假如我們只想收到別人發(fā)過(guò)來(lái)的 ID 為 0x317 的標(biāo)準(zhǔn)數(shù)據(jù)幀:
0X317 二進(jìn)制位: 011 0001 0111
那么可以這樣設(shè)置 :
0.png (128.53 KB, 下載次數(shù): 155)
下載附件
2018-4-16 04:34 上傳
0.png (120.49 KB, 下載次數(shù): 141)
下載附件
2018-4-16 04:35 上傳
種標(biāo)準(zhǔn)數(shù)據(jù)幀了。
以上是 32 位模式下標(biāo)識(shí)符屏蔽模式和標(biāo)識(shí)符列表模式下的設(shè)置方法。
在 16 位模式下,只不過(guò)把兩個(gè) 32 位寄存器拆成了 4 個(gè) 16 位的而已,原理和 32 位模式下是一樣的。就不贅述了。
接收數(shù)據(jù)是通過(guò)指向 Can Can Can Can R R R R xMsg xMsg xMsg xMsg 結(jié)構(gòu)體變量的指針傳遞的。直接調(diào)用 CAN_Receive 即可輕松完成。
typedef struct
{
uint32_t StdId;
uint32_t ExtId;
uint8_t IDE;
uint8_t RTR;
uint8_t DLC;
uint8_t Data[8];
uint8_t FMI;
} CanRxMsg;
CanRxMsg 結(jié)構(gòu)與 CanTxMsg 差不多。只是多了一個(gè) FMI 域。
FMI
FMI 設(shè)定為消息將要通過(guò)的過(guò)濾器索引 , 這些消息存儲(chǔ)于郵箱中 。 該參數(shù)取值范圍 0 到0xFF 。
完整的pdf格式文檔51黑下載地址:
STM32CAN詳解.pdf
(252.93 KB, 下載次數(shù): 595)
2018-4-14 18:18 上傳
點(diǎn)擊文件名下載附件
STM32 CAN 下載積分: 黑幣 -5
|