STM32 CAN控制器
1 概述
STM32 CAN控制器(bxCAN),支持CAN 2.0A 和 CAN 2.0B Active版本協(xié)議。CAN 2.0A 只能處理標準數(shù)據(jù)幀且擴展幀的內(nèi)容會識別錯誤,而CAN 2.0B Active 可以處理標準數(shù)據(jù)幀和擴展數(shù)據(jù)幀。
2 bxCAN 特性
- 波特率最高可達1M bps
- 支持時間觸發(fā)通信(CAN的硬件內(nèi)部定時器可以在TX/RX的幀起始位的采樣點位置生成時間戳)
- 具有3級發(fā)送郵箱
- 具有3級深度的2個接收FIFO
- 可變的過濾器組(最多28個)
3 CAN的內(nèi)容
3.1 CAN框圖
① CAN內(nèi)核
包含各種控制/狀態(tài)/配置寄存器,可以配置模式、波特率等
②發(fā)送郵箱
用來緩存待發(fā)送的報文,最多可以緩存3個報文
③接收FIFO
緩存接收到的有效報文
④接收過濾器
篩選有效報文
3.2 CAN 控制器模式
CAN的控制器模式有工作模式、測試模式和調(diào)試模式。
3.2.1 工作模式
CAN控制器的工作模式有三種:初始化模式、正常模式和睡眠模式。工作流程如下圖:
3.2.2 測試模式
CAN控制器的測試模式有三種:靜默模式、環(huán)回模式和環(huán)回靜默模式。在初始化模式下進行配置。
3.3 接收過濾器
屏蔽位寄存器中位值為1,表示與ID要必須匹配;位值為0,表示可不與ID匹配。
在使能過濾器情況下,總線上廣播的報文ID與過濾器的配置都不匹配,CAN控制器會丟棄該報文,不會進入到接收FIFO中。
注意:標識符選擇位IDE和幀類型RTR需要一致。不同過濾器組的工作模式可以設置為不同。
3.4 CAN控制器位時許
文章來源:http://www.zghlxwxcb.cn/news/detail-618556.html
4 CAN是如何工作的(CAN框圖)
4.1 CAN通信框圖簡化版
文章來源地址http://www.zghlxwxcb.cn/news/detail-618556.html
5 CAN的代碼配置流程
- 使能 GPIO 時鐘及配置 GPIO;
- 使能 CAN 外設時鐘;
- 配置 CAN 外設的工作模式、位時序以及波特率;
- 配置篩選器的工作模式;
- 配置 CAN 中斷;
- 使能接收中斷;
- 編寫測試程序,手法報文并校驗。
6 相關寄存器
6.1 CAN主控制/狀態(tài)寄存器
- CAN_MCR.RFLM 接收FIFO鎖定模式(Receive FIFO locked mode)
作用:當該位設置為‘0’時,在接收溢出時 FIFO 未被鎖定,當接收 FIFO 的報文未被讀出,下一條收到的報文會覆蓋原有的報文;當該位設置為‘1’時,在接收溢出時 FIFO 被鎖定,當接收 FIFO 的報文未被讀取,下一個收到的報文會丟棄。 - CAN_MCR.TXFP 發(fā)送 FIFO 優(yōu)先級(Transmit FIFO pripority)
作用:當有多個報文在等待發(fā)送時,該位決定這些報文的發(fā)送順序。當該位為’0’時,優(yōu)先級由報文的標識符來決定;當該位為‘1’時,優(yōu)先級由發(fā)送請求的順序來決定。 - CAN_MCR.INRQ 初始化請求(Initialization request)
作用:軟件對該位清’0’可使CAN從初始化模式進入正常工作模式:當CAN在接收引腳檢測到連續(xù)的11個隱性位后,CAN就達到同步,并為接收和發(fā)送數(shù)據(jù)作好準備了。為此,硬件相應地對CAN_MSR寄存器的INAK位清’0’。
軟件對該位置’1‘可使CAN從正常工作模式進入初始化模式:一旦當前的CAN活動(發(fā)送或接收)結束,CAN就進入初始化模式。相應地,硬件對CAN_MSR寄存器的INAK位置’1’。 - CAN_MCR.RX CAN接收電平(CAN Rx sinal)
作用:該位反應CAN接收引腳的實際電平 - CAN_MCR.RXM 接收模式(Receive mode)
作用:該位為‘1’表示CAN 當前為接收器 - CAN_MCR.TXM 發(fā)送模式(Transmit mode)
作用:該位為‘1’表示CAN 當前為發(fā)送器 - CAN_MCR.INAK 初始化確認
作用:該位由硬件置’1’,指示軟件CAN模塊正處于初始化模式。 該位是對軟件請求進入初始化模式的確認(對CAN_MCR寄存器的INRQ位置’1’)。
當CAN退出初始化模式時硬件對該位清’0’ (需要跟CAN總線同步)。這里跟CAN總線同步是指,硬件需要在CAN的RX引腳上檢測到連續(xù)的11位隱性位。
6.2 CAN 發(fā)送郵箱寄存器
- CAN_TSR.LOWx 郵箱 x 最低優(yōu)先級標志
作用:當多個郵箱在等待發(fā)送報文,且郵箱 x 的優(yōu)先級最低時,硬件對該位置‘1’
note:如果只有 1 個郵箱在等待,則 LOW[2:0]被清0 - CAN_TSR.TMEx 發(fā)送郵箱x空
作用:當郵箱 x 中沒有等待發(fā)送的報文時,硬件對該位置‘1’ - CAN_TSR.COME 郵箱號(Mailbox code)
作用:表示下一個空的發(fā)送郵箱號。 - CAN_TSR.TERRx 郵箱x發(fā)送失?。═rasmission error of mailbox x)
作用:該位置‘1’,表示郵箱 x 發(fā)送失敗 - CAN_TSR.TXOKx 郵箱x發(fā)送成功(Tranmissiion OK of mailbox x)
作用:該位置‘1’,表示郵箱 x 發(fā)送成功 - CAN_TSR.RQCPx 郵箱x請求發(fā)送成功(Request completed mailbox x)
作用:該位置‘1’,表示對郵箱 x 的請求發(fā)送完成
6.3 CAN 接收 FIFO 0寄存器
- CAN_RF0R.FOVR0 FIFO 0 溢出(FIFO 0 overrun)
作用:該位置‘1’,表示 FIFO 0已滿,且收到的新的報文符文過濾條件。該位由軟件清‘0’ - CNA_RF0R.FULL0 FIFO 0 滿(FIFO 0 overrun)
作用:該位置‘1’,表示 FIFO 0中有 3 個報文 - CAN_RF0R.FMP0 FIFO 0 報文數(shù)目(FIFO 0 message pending)
作用:表示當前接收 FIFO 0 中存放的報文數(shù)目
6.4 CAN 過濾寄存器
- CAN_FMR.FINIT 過濾器初始化模式(Filter init mode)
作用:表示過濾器組的初始化模式,‘0’表示過濾器組工作在正常模式,‘1’表示過濾器組工作在初始化模式 - CAN_FM1R.FBMx 過濾器模式(Filter mode)
作用:表示過濾器組 x 的工作模式,‘0’表示過濾器組x的 2 個 32 位寄存器工作在標識符屏蔽位模式,‘1’表示過濾器組x的2個32位寄存器工作在標識符列表模式 - CAN_FS1R.FSCx 過濾器位寬設置(Filter scale configuration)
作用:設置過濾器的位寬,‘0’表示過濾器位寬為 2 個 16 位,‘1’表示過濾器位寬為單個 32 位。 - CAN_FFA1R.FFAx 過濾器 x 關聯(lián)FIFO(Filter FIFO assignment for filter x)
作用:表示關聯(lián)到某個 FIFO,‘0’表示過濾器被關聯(lián)到 FIFO0,‘1’表示過濾器被關聯(lián)到 FIFO1
note:只有在設置 CAN_FMR.INIT == 1,使過濾器處于初始化模式下,才能對該寄存器寫入。 - CAN_FA1R.FACTx 過濾器激活(Filter active)
作用:‘0’表示過濾器被禁用,‘1’表示過濾器被激活
到了這里,關于CAN學習筆記3:STM32 CAN控制器介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!