|
語言生動形象,讓人一看就懂。
STM32 CAN發(fā)送和接收過濾原理
通過對 CANBUS 協(xié)議的理解 , 我們知道 : CAN 總線上的節(jié)點接收或發(fā)送數(shù)據(jù)都是以幀為單位的 ! ! ! CAN 協(xié)議規(guī)定了好幾種幀類型,但是對于我們應(yīng)用來說,只有數(shù)據(jù)幀和遠程幀可以通過軟件編程來控制 。 ( 其他幾種幀都是由 CAN 控制器硬件實現(xiàn)的 , 我們想管也管不了 ) 。而數(shù)據(jù)幀和遠程幀最大的區(qū)別在于 : 遠程幀沒有數(shù)據(jù)域 。 數(shù)據(jù)幀分為標(biāo)準(zhǔn)數(shù)據(jù)幀和擴展數(shù)據(jù)幀,它們之間最大的區(qū)別在于:標(biāo)識符 (ID) 長度不同(標(biāo)準(zhǔn)幀為 11 位,擴展幀為 29 位 ) 。為了能更好地理解下面的內(nè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ā)過來的 ID 為 0x317 的標(biāo)準(zhǔn)數(shù)據(jù)幀:
0X317 二進制位: 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)識符屏蔽模式和標(biāo)識符列表模式下的設(shè)置方法。
在 16 位模式下,只不過把兩個 32 位寄存器拆成了 4 個 16 位的而已,原理和 32 位模式下是一樣的。就不贅述了。
接收數(shù)據(jù)是通過指向 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 差不多。只是多了一個 FMI 域。
FMI
FMI 設(shè)定為消息將要通過的過濾器索引 , 這些消息存儲于郵箱中 。 該參數(shù)取值范圍 0 到0xFF 。
完整的pdf格式文檔51黑下載地址:
STM32CAN詳解.pdf
(252.93 KB, 下載次數(shù): 595)
2018-4-14 18:18 上傳
點擊文件名下載附件
STM32 CAN 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|