最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

stm32的can配置,獲取標(biāo)識(shí)符(ID)

2021-06-07 17:38 作者:GXTon_阿通  | 我要投稿

關(guān)于stm32的can的特性,從手冊(cè)上可以查到:

手冊(cè)上面的內(nèi)容比較雜,所以截取了一些有用的片段:(大家也可以查看手冊(cè),)

關(guān)于can的硬件接線:

寄存器的主要功能:

整個(gè)的流程可以從這張圖中看出,這張圖是很重要的:

從下面這張圖中,可以看出很多東西,可以看出數(shù)據(jù)流,

1,從圖中可以看出,stm32里有兩個(gè)can;

2,從圖中可以看出,stm32里每個(gè)can有3個(gè)發(fā)送郵箱,兩個(gè)接收f(shuō)ifo,每個(gè)fifo有三個(gè)深度.

3,從圖中可以看出,數(shù)據(jù)經(jīng)過(guò)過(guò)濾器,進(jìn)入到fifo,需要設(shè)置過(guò)濾器決定數(shù)據(jù)進(jìn)入哪個(gè)fifo.

? 實(shí)際上,can的fifo0和fifo1是兩個(gè)不同的中斷名字,

can的發(fā)送:

上面的圖片說(shuō)明了發(fā)送的過(guò)程,

  1. 發(fā)送前,需要將CAN_TIxR的TXRQ位置1,用來(lái)表示有數(shù)據(jù)要發(fā)送.

  2. 選擇一個(gè)郵箱,這個(gè)郵箱的選擇是硬件自己完成的,根據(jù)CAN的結(jié)構(gòu)圖(上面),

    可以看出有0,1,2這三個(gè)發(fā)送郵箱,但是用那個(gè)郵箱是你決定不了的,需要根據(jù)規(guī)則:

    硬件自己會(huì)查詢當(dāng)前哪個(gè)郵箱是空的,如果哪個(gè)郵箱有空閑,就先用哪個(gè).

  3. 當(dāng)有多個(gè)郵箱被裝滿數(shù)據(jù)的時(shí)候,哪個(gè)會(huì)先發(fā)送? 這里有兩個(gè)方法,可以通過(guò)軟件挑選:

    方法一:發(fā)送順序有郵箱中存儲(chǔ)消息的標(biāo)識(shí)符來(lái)確定,如果標(biāo)識(shí)符一樣,則按照郵箱號(hào)小的發(fā)送.(可以理解為按照緊急程度發(fā)送); 這里會(huì)出現(xiàn)一些奇怪的現(xiàn)象,就是你先發(fā)A后發(fā)B,對(duì)方可能現(xiàn)接受到B然后再接收到A.因?yàn)锽比較緊急,所以即使先發(fā)送了A,也不一定第一個(gè)收到A.

    方法二:按照請(qǐng)求順序發(fā)送,通過(guò)設(shè)置CAN_MCR寄存器中的TXFP位,變成FIFO模式發(fā)送,這樣就會(huì)按照請(qǐng)求順序發(fā)送.(可以認(rèn)為,先到先發(fā)); 這個(gè)模式對(duì)分段發(fā)送很有用,如果你的數(shù)據(jù)特別長(zhǎng),需要分成好幾條報(bào)文,那么就用方法二.

  4. 等待總線變空閑,空閑后就會(huì)發(fā)送了.

  5. 檢測(cè)是否發(fā)送成功,can發(fā)送出數(shù)據(jù)后,還會(huì)檢測(cè)是否發(fā)送成功,這個(gè)是硬件幫助我們完成的,如果發(fā)送成功,CAN_TSR寄存器的RQCP和TXOK會(huì)置一.

    如果發(fā)送失敗,CAN_TSR寄存器的ALST位(仲裁丟失) \ TERR位(發(fā)送錯(cuò)誤)會(huì)置一.

    這也是can的優(yōu)點(diǎn),它發(fā)送完成之后會(huì)檢測(cè)是否成功.

can會(huì)幫助我們完成很多事,比如重新發(fā)送,只需要操作寄存器就可以,并不需要軟件的重新發(fā)送,硬件會(huì)自動(dòng)重發(fā)失敗的信息,如果不需要這個(gè)功能,可以通過(guò)配置寄存器關(guān)閉,

下面是郵箱發(fā)送的過(guò)程中,這個(gè)郵箱寄存器變化圖,這個(gè)圖也很重要,它可以幫助啊我們了解整個(gè)的過(guò)程:(要記住一些必要的寄存名字,這樣看起來(lái)會(huì)舒服些,也容易弄懂)

can的接收

接收緩存的寄存器變化.

根據(jù)can的結(jié)構(gòu)框圖(上面),可以看到一個(gè)can有兩個(gè)FIFO,分別是FIFO0和FIFO1,FIFO是硬件管理的.

FIFO的長(zhǎng)度是有限的,如果超出,就會(huì)溢出,

溢出的處理有兩種方法,

篩選器的配置:

一共有28個(gè)或14個(gè)篩選器組.

篩選器組,可以進(jìn)行伸縮配置,分為,一個(gè)32位的篩選器,或兩個(gè)16位的篩選器.

篩選器組的用法,掩碼模式和標(biāo)識(shí)符列表模式.

篩選器的配置模式,

can的錯(cuò)誤管理:

郵箱的構(gòu)成:

如何獲取can接收到的數(shù)據(jù):

首先從庫(kù)里調(diào)用函數(shù),

can接收到的數(shù)據(jù)都到了RxMessage中,

原型是,(里面就有獲取ID)

注意CanRxMsg這個(gè)結(jié)構(gòu)體

跳進(jìn),CanRxMsg這個(gè)結(jié)構(gòu)體里面,可以看到結(jié)構(gòu)體的定義,

然后就可以查看手冊(cè),和它的英文說(shuō)明,就可以知道接收的都是些什么了.

手冊(cè)上的說(shuō)明,

參考:

https://blog.csdn.net/Leisure_ksj/article/details/106788852

stm32的can配置,獲取標(biāo)識(shí)符(ID)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
万载县| 衡阳市| 灌云县| 凤冈县| 庄浪县| 韩城市| 香格里拉县| 桦甸市| 万年县| 吴旗县| 松桃| 始兴县| 盐亭县| 临邑县| 靖江市| 宁阳县| 南郑县| 商城县| 楚雄市| 凤山市| 金塔县| 吴川市| 阳城县| 安多县| 济阳县| 泽普县| 龙川县| 临漳县| 仁寿县| 沙坪坝区| 兴安盟| 建瓯市| 乌审旗| 灵川县| 鹤山市| 阿鲁科尔沁旗| 桃园县| 济阳县| 阳泉市| 杭州市| 连州市|