日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32_CAN总线知识

發布時間:2025/6/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32_CAN总线知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、CAN總線的特點:

bxCAN主要特點

● 支持CAN協議2.0A和2.0B主動模式
● 波特率最高可達1兆位/秒
● 支持時間觸發通信功能
發送
● 3個發送郵箱
● 發送報文的優先級特性可軟件配置
● 記錄發送SOF時刻的時間戳
接收
● 3級深度的2個接收FIFO
● 可變的過濾器組:
─ 在互聯型產品中,CAN1和CAN2分享28個過濾器組
─ 其它STM32F103xx系列產品中有14個過濾器組
● 標識符列表
● FIFO溢出處理方式可配置
● 記錄接收SOF時刻的時間戳
時間觸發通信模式
● 禁止自動重傳模式
● 16位自由運行定時器
● 可在最后2個數據字節發送時間戳
管理
● 中斷可屏蔽
● 郵箱占用單獨1塊地址空間,便于提高軟件效率
雙CAN
● CAN1:是主bxCAN,它負責管理在從bxCAN和512字節的SRAM存儲器之間的通信
● CAN2:是從bxCAN,它不能直接訪問SRAM存儲器

● 這2個bxCAN模塊共享512字節的SRAM存儲器

注:在中容量和大容量產品中,USB和CAN共用一個專用的512字節的SRAM存儲器用于數據的發送和接收,因此不同同時使用USB和CAN(共享的SRAM被USB和CAN模塊互斥地訪問)。USB和CAN可以同時用于一個應用中但不能在同一個時間使用。


CAN總線的拓撲結構 CAN控制器是stm32芯片自帶的,CAN收發器是專門外接的芯片,野火的開發板上是帶的TJA1050

stm32 互聯型產品的雙CAN框圖:

發送報文流程:

? ? 應用程序選擇1個空置的發送郵箱;設置標識符,數據長度和待發送數據;然后對CAN_TIxR寄存器的TXRQ位置’1’,來請求發送。TXRQ位置’1’后,郵箱就不再是空郵箱;而一旦郵箱不再為空置,軟件對郵箱寄存器就不再有寫的權限。TXRQ位置1后,郵箱馬上進入掛號狀態,并等待成為最高優先級的郵箱,參見發送優先級。一旦郵箱成為最高優先級的郵箱,其狀態就變為預定發送狀態。一旦CAN總線進入空閑狀態,預定發送郵箱中的報文就馬上被發送(進入發送狀態)。一旦郵箱中的報文被成功發送后,它馬上變為空置郵箱;硬件相應地對CAN_TSR寄存器的RQCP和TXOK位置1,來表明一次成功發送。如果發送失敗,由于仲裁引起的就對CAN_TSR寄存器的ALST位置’1’,由于發送錯誤引起的就對TERR位置’1’。


發送報文的優先級:

由標識符決定
當有超過1個發送郵箱在掛號時,發送順序由郵箱中報文的標識符決定。根據CAN協議,標識符數值最低的報文具有最高的優先級。如果標識符的值相等,那么郵箱號小的報文先被發送。
由發送請求次序決定
通過對CAN_MCR寄存器的TXFP位置’1’,可以把發送郵箱配置為發送FIFO。在該模式下,發送的優先級由發送請求次序決定。該模式對分段發送很有用。

接收管理
接收到的報文,被存儲在3級郵箱深度的FIFO中。FIFO完全由硬件來管理,從而節省了CPU的處理負荷,簡化了軟件并保證了數據的一致性。應用程序只能通過讀取FIFO輸出郵箱,來讀取FIFO中最先收到的報文。
有效報文
根據CAN協議,當報文被正確接收(直到EOF域的最后一位都沒有錯誤),且通過了標識符過濾,那么該報文被認為是有效報文



FIFO管理
FIFO從空狀態開始,在接收到第一個有效的報文后,FIFO狀態變為掛號_1(pending_1),硬件相應地把CAN_RFR寄存器的FMP[1:0]設置為’01’(二進制01b)。軟件可以讀取FIFO輸出郵箱來讀出郵箱中的報文,然后通過對CAN_RFR寄存器的RFOM位設置’1’來釋放郵箱,這樣FIFO又變為空狀態了。如果在釋放郵箱的同時又收到了一個有效的報文,那么FIFO仍然保留在掛號_1狀態,軟件可以讀取FIFO輸出郵箱來讀出新收到的報文。
如果應用程序不釋放郵箱,在接收到下一個有效的報文后,FIFO狀態變為掛號_2(pending_2),硬件相應地把FMP[1:0]設置為’10’(二進制10b)。重復上面的過程,第三個有效的報文把FIFO變為掛號_3狀態(FMP[1:0]=11b)。此時,軟件必須對RFOM位設置1來釋放郵箱,以便FIFO可以有空間來存放下一個有效的報文;否則,下一個有效的報文到來時就會導致一個報文的丟失。為掛號_3狀態(FMP[1:0]=11b)。此時,軟件必須對RFOM位設置1來釋放郵箱,以便FIFO可以有空間來存放下一個有效的報文;否則,下一個有效的報文到來時就會導致一個報文的丟失。

報文的溢出:

當FIFO處于掛號_3狀態(即FIFO的3個郵箱都是滿的),下一個有效的報文就會導致溢出,并且一個報文會丟失。此時,硬件對CAN_RFR寄存器的FOVR位進行置’1’來表明溢出情況。至于哪個報文會被丟棄,取決于對FIFO的設置:
● 如果禁用了FIFO鎖定功能(CAN_MCR寄存器的RFLM位被清’0’),那么FIFO中最后收到的報文就被新報文所覆蓋。這樣,最新收到的報文不會被丟棄掉。
● 如果啟用了FIFO鎖定功能(CAN_MCR寄存器的RFLM位被置’1’),那么新收到的報文就被丟棄,軟件可以讀到FIFO中最早收到的3個報文。
接收相關的中斷
一旦往FIFO存入一個報文,硬件就會更新FMP[1:0]位,并且如果CAN_IER寄存器的FMPIE位為’1’,那么就會產生一個中斷請求。當FIFO變滿時(即第3個報文被存入),CAN_RFR寄存器的FULL位就被置’1’,并且如果CAN_IER寄存器的FFIE位為’1’,那么就會產生一個滿中斷請求。在溢出的情況下,FOVR位被置’1’,并且如果CAN_IER寄存器的FOVIE位為’1’,那么就會產生一個溢出中斷請求。

標識符過濾
在CAN協議里,報文的標識符不代表節點的地址,而是跟報文的內容相關的。因此,發送者乙廣播的形式把報文發送給所有的接收者。節點在接收報文時-根據標識符的值-決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟棄且無需軟件的干預。在stm32普通產品中提供了14個位寬可變、可配置的過濾器(0~13),而互聯產品則提供了28個位寬可變、可配置的過濾器(0~27),以便只接收那些軟件需要的報文。硬件過濾的做法節省了CPU開銷,否則就必須由軟件過濾從而占用一定的CPU開銷。


過濾器可配置為,屏蔽位模式和標識符列表模式
屏蔽位模式
在屏蔽位模式下,標識符寄存器和屏蔽寄存器一起,指定報文標識符的任何一位,應該按照“必須匹配”或“不用關心”處理。
標識符列表模式
在標識符列表模式下,屏蔽寄存器也被當作標識符寄存器用。因此,不是采用一個標識符加一個屏蔽位的方式,而是使用2個標識符寄存器。接收報文標識符的每一位都必須跟過濾器標識符相同。

過濾器組位寬和模式的設置
過濾器組可以通過相應的CAN_FMR寄存器配置。在配置一個過濾器組前,必須通過清除CAN_FAR寄存器的FACT位,把它設置為禁用狀態。通過設置CAN_FS1R的相應FSCx位,可以配置一個過濾器組的位寬。通過CAN_FMR的FBMx位,可以配置對應的屏蔽/標識符寄存器的標識符列表模式或屏蔽位模式。
為了過濾出一組標識符,應該設置過濾器組工作在屏蔽位模式
為了過濾出一個標識符,應該設置過濾器組工作在標識符列表模式
應用程序不用的過濾器組,應該保持在禁用狀態。
過濾器組中的每個過濾器,都被編號為(叫做過濾器號)從0開始,到某個最大數值-取決于過濾器組的模式和位寬的設置。

過濾器優先級規則
根據過濾器的不同配置,有可能一個報文標識符能通過多個過濾器的過濾;在這種情況下,存放在接收郵箱中的過濾器匹配序號,根據下列優先級規則來確定:
● 位寬為32位的過濾器,優先級高于位寬為16位的過濾器
● 對于位寬相同的過濾器,標識符列表模式的優先級高于屏蔽位模式
● 位寬和模式都相同的過濾器,優先級由過濾器號決定,過濾器號小的優先級高


位時間特性



簡單的說就是在can寄存器配置的時候對于寄存器CAN_CJW、CAN_BS1、CAN_BAS2的設置值,以及CAN_Prescaler的設置,

波特率=clk/(CAN_CJW+CAN_BS1+CAN_BAS2)/CAN_Prescaler。

以上就是CAN總線的部分知識,還有一些沒有粘貼在這里,可以在stm32手冊中查找,另外對于can寄存器的設置都是以上介紹的代碼實現,因此在寄存器設置中有不理解的地方可以參考can總線的介紹。

轉載于:https://www.cnblogs.com/longbiao831/p/4556283.html

總結

以上是生活随笔為你收集整理的stm32_CAN总线知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。