

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STM32CAN接收過(guò)濾和發(fā)送分析通過(guò)對(duì) CANBUS CAN 總線上的節(jié)點(diǎn)接收或發(fā)送數(shù)據(jù)都是以幀為單CAN 協(xié)議規(guī)定了好幾種幀類型,但是對(duì)于我們應(yīng)用來(lái)說(shuō),只有數(shù)據(jù)幀和遠(yuǎn)程幀可 CAN 而數(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ù)幀是什么樣子的:我們首先來(lái)看發(fā)送:前面已經(jīng)強(qiáng)調(diào)了 CAN 總線上的節(jié)點(diǎn)接收或者發(fā)送數(shù)據(jù)都是以幀為單位。假如我們要發(fā)送一個(gè)字節(jié)的數(shù)據(jù):0 x5A,是不是像串口發(fā)送數(shù)據(jù)那樣,直接把 0 x5A 寫(xiě)入
2、發(fā)送緩沖寄存器,然后發(fā)送就可以了呢?NOCANTNND,這么復(fù)雜?沒(méi)關(guān)系,ST 庫(kù)函數(shù)已經(jīng)提供了一個(gè)結(jié)構(gòu),我們只需要填充該結(jié)構(gòu)就可以了。我們來(lái)看一下這個(gè)結(jié)構(gòu)的樣子:typedef structuint32_t StdId; /標(biāo)準(zhǔn)幀ID,如果您要發(fā)送擴(kuò)展幀。可以不管它uint32_t ExtId; /擴(kuò)展幀ID,如果您要發(fā)送標(biāo)準(zhǔn)幀??梢圆还芩黸int8_t IDE;uint8_t RTR;uint8_t DLC;您是想發(fā)送標(biāo)準(zhǔn)幀還是擴(kuò)展幀?您是想發(fā)送數(shù)據(jù)幀還是遠(yuǎn)程幀?/ 您想發(fā)送數(shù)據(jù)的長(zhǎng)度。uint8_t Data8; /您想要發(fā)送的數(shù)據(jù)。 CanTxMsg;StdId用來(lái)設(shè)定標(biāo)準(zhǔn)標(biāo)識(shí)符。它的
3、取值范圍為0 到 。ExtId用來(lái)設(shè)定擴(kuò)展標(biāo)識(shí)符。它的取值范圍為0 到 0 x1FFFFFFF。IDE用來(lái)設(shè)定消息標(biāo)識(shí)符的類型。 值IDE描述CAN_Id_StandardCAN_Id_Extended使用標(biāo)準(zhǔn)標(biāo)識(shí)符使用擴(kuò)展標(biāo)識(shí)符RTR用來(lái)設(shè)定待傳輸消息的幀類型。它可以設(shè)置為數(shù)據(jù)幀或者遠(yuǎn)程幀。 值描述CAN_RTR_DataCAN_RTR_Remote數(shù)據(jù)幀遠(yuǎn)程幀DLC用來(lái)設(shè)定待傳輸消息的幀長(zhǎng)度。它的取值范圍是0 到0 x8。包含了待傳輸數(shù)據(jù),它的取值范圍為0 到。先聲明一個(gè) CanTxMsg類型的變量,然后按照自己具體的需要,填充此結(jié)構(gòu)變量就可強(qiáng)調(diào):這里的StdId 或者 ExtId 是根據(jù)
4、自己的實(shí)際需要設(shè)置的!我們先拋開(kāi)它們所發(fā)送出去讓別人過(guò)濾)者都倒在了這里。STM32參考手冊(cè)中提到:bxCAN控制器為應(yīng)用程序提供了14 個(gè)位寬可變的、可配置的過(guò)濾器組(130) 28 16位或者 322 32先來(lái)理解一句話:共有14個(gè)過(guò)濾器組,每個(gè)過(guò)濾器組x由 個(gè)位寄存器,CAN_FxR1和CAN_FxR2組成。搞定一個(gè)過(guò)濾器組,其他的都可以以此類推。我們先來(lái)看1個(gè)32-標(biāo)示符屏蔽的情況CAN_FxR1作IDCAN_FxR2作屏蔽:先看圖:這里的ID 是什么意思?難道就是前面所說(shuō)的發(fā)送數(shù)據(jù)幀里面的 ID?NO!這里的 ID和自己發(fā)送的幀里面的 ID 沒(méi)有一點(diǎn)關(guān)系。完全是兩個(gè)東西,在硬件上屬于
5、不同的寄存器。里的ID也是根據(jù)自己的實(shí)際需要設(shè)置的!我們先拋開(kāi)它們所代表的實(shí)際意義,認(rèn)為它過(guò)濾別人發(fā)送過(guò)來(lái)的幀的ID)這里的屏蔽是什么意思?這里的屏蔽和ID共同配合完成過(guò)濾。這里的映像是什么意思?映像的意思就是假定收到的幀的ID信息。下面舉個(gè)例子,一切都會(huì)一目了然:假如我們只想收到別人發(fā)過(guò)來(lái)的ID 為0 x317的標(biāo)準(zhǔn)數(shù)據(jù)幀:0X317 二進(jìn)制位:011 0001 0111那么可以這樣設(shè)置:CAN_FxR10110 0010 111X XXXX XXXX XXXX XXXX 00X (ID)CAN_FxR21111 1111 1110 0000 0000 0000 0000 110 屏蔽)這里
6、是我們?cè)O(shè)置的想要收到的數(shù)據(jù)幀的ID。這里為 1 的位,意味著收到的數(shù)據(jù)幀中相應(yīng)的 ID 位必須和設(shè)置的 ID位一樣(必須匹配。:假如我們想收到別人發(fā)過(guò)來(lái)的ID為0 x310到0 x317的標(biāo)準(zhǔn)數(shù)據(jù)幀:那么可以這樣設(shè)置:CAN_FxR10110 0010 xxxX XXXX XXXX XXXX XXXX 00X (ID)CAN_FxR21111 1111 0000 0000 0000 0000 0000 110 屏蔽)這里的紅色xxx就代表000到111的任意組合。這里為0 ID 不一定非要與設(shè)置的ID 不用關(guān)心。這里紅色部分表明必須是標(biāo)準(zhǔn)數(shù)據(jù)幀。:假如我們想收到別人發(fā)過(guò)來(lái)的ID為0 x000到
7、0 x7FF的標(biāo)準(zhǔn)數(shù)據(jù)幀:那么可以這樣設(shè)置:CAN_FxR1xxxx xxxx xxxX XXXX XXXX XXXX XXXX 00X (ID)CAN_FxR20000 0000 0000 0000 0000 0000 0000 110 屏蔽)接下來(lái)看2 個(gè)32位過(guò)濾器標(biāo)識(shí)符列表模式,CAN_FxR1和CAN_FxR2都作為ID.這種情況就很簡(jiǎn)單了。只有收到的幀的 ID 必須和CAN_FxR1或者 CAN_FxR2完全一樣才接收。這樣的話,就只能接收兩種不同的。舉個(gè)例子:如果我們把CAN_FxR1和CAN_FxR2設(shè)置為下面的樣子。CAN_FxR10110 0010 1110 0000 00
8、00 0000 0000 000 (ID)CAN_FxR20000 0001 1110 0000 0000 0000 0000 000 (ID)這樣的話,就只能過(guò)濾出 ID 為 0 x317(與 CAN_FxR1)和 0 x00F(與 CAN_FxR2必須一樣兩種標(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ò)指向完成。結(jié)構(gòu)體變量的指針傳遞的。直接調(diào)用 CAN_Receive 即可輕松typedef structuint32_t StdId;uint32_t ExtId;uint8_t IDE;uint8_t RTR;uint8_t DLC;uint8_t Data8;uint8_t FMI; CanRxMsg;CanRxMsg結(jié)構(gòu)與CanTxMsg差不多。只是多了一個(gè)FMI域。FMIFMI0 到。-北極星電子 CANBUS 周邊產(chǎn)品介紹:歡迎大家咨詢了解。PCI8510:基于 PCI 總線的 PC CAN 接口卡。CAN 控制器為 SJA1000.工業(yè)級(jí)。收發(fā)速度達(dá) 8000幀/秒以上。USBCAN:基于 USB 總線的 PC CAN 接口卡。CAN
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 重慶物理考試題及答案
- 解說(shuō)崗位面試題及答案
- 網(wǎng)絡(luò)通信java面試題及答案
- 消化內(nèi)科面試題庫(kù)及答案
- 2026屆陜西省渭南市潼關(guān)縣高一化學(xué)第一學(xué)期期末質(zhì)量檢測(cè)試題含解析
- 大專阿語(yǔ)考試題及答案
- 校車安全操作培訓(xùn)內(nèi)容
- 浙江初會(huì)考試試題及答案
- 家電公司拓展訓(xùn)練組織規(guī)定
- 2026屆山東省昌邑市文山中學(xué)化學(xué)高二第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含答案
- 《血管活性藥物靜脈輸注護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀
- 水土保持方案投標(biāo)文件技術(shù)部分
- 行政管理內(nèi)控制度模版(3篇)
- GB/T 3324-2024木家具通用技術(shù)條件
- 老撾勞務(wù)合同范例
- 空白+彩色世界區(qū)域地理填圖
- 小紅書(shū)食用農(nóng)產(chǎn)品承諾書(shū)示例
- 完整退役軍人安置條例課件
- 2024青島版數(shù)學(xué)一上第一單元教學(xué)設(shè)計(jì):快樂(lè)課堂第一課時(shí)(1-5數(shù)的認(rèn)識(shí))
- 人教版七、八年級(jí)(共4冊(cè))英語(yǔ)單詞默寫(xiě)表
評(píng)論
0/150
提交評(píng)論