STM32之CAN总线原理
簡介:
特點:
物理特征:
總線電平=CAN_H的電壓-CAN_L的電壓
顯性電平對應邏輯0=總線電平為2V左右
隱性電平對應邏輯0=總線電平為0V
顯性電平具有優先權,只要有一個單元輸出顯性電平,總線上即為顯性電平。而隱形電平則具有包容的意味,只有所有的單元都輸出隱性電平,總線上才為隱性電平(顯性電平比隱性電平更強)。另外,在CAN總線的起止端都有一個120Ω的終端電阻,來做阻抗匹配,以減少回波反射。
幀種類介紹:
| 數據幀 | 用于發送單元向接收單元傳送數據的幀 |
| 遙控幀 | 用于接收單元向具有相同 ID 的發送單元請求數據的幀 |
| 錯誤幀 | 用于當檢測出錯誤時向其它單元通知錯誤的幀 |
| 過載幀 | 用于接收單元通知其尚未做好接收準備的幀 |
| 間隔幀 | 用于將數據幀及遙控幀與前面的幀分離開來的幀 |
注:其中,數據幀和遙控幀有標準格式和擴展格式兩種格式。
標準格式有11 個位的標識符(ID),擴展格式有29 個位的ID 。
STM32 CAN控制器簡介:
3種模式:
工作模式:
- 初始化模式(INRQ=1,SLEEP=0)
- 正常模式(INRQ=0,SLEEP=0)
- 睡眠模式(SLEEP=1)
測試模式:
- 靜默模式( LBKM=0,SILM=1 )
- 環回模式( LBKM=1,SILM=0 )
- 環回靜默模式(LBKM=1,SILM=1)
調試模式(不常用)
STM32 CAN篩選器位寬和模式配置:
CAN的標識符不表示目的地址而是表示發送優先級,接收節點根據標識符的值,來決定是否接收對應消息。
標識符屏蔽模式:過濾一組標識符
標識符列表模式:過濾一個標識符
例:設置篩選器組0工作在:1個32位篩選器-標識符屏蔽模式,然后設置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是設置我們需要必須關心的ID,表示收到的映像,其位[31:24]和位[15:8]這16個位的必須和CAN_F0R1中對應的位一模一樣,而另外的16個位則不關心,可以一樣,也可以不一樣,都認為是正確的ID,即收到的映像必須是0XFFxx00xx,才算是正確的(x表示不關心)。
波特率設置:
TM32F103,設TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps。
STM32F407,設TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。
寄存器:
CAN主控制寄存器(CAN_MCR)
該寄存器的我們僅介紹下INRQ位,該位用來控制初始化請求。
設置INRQ=0,可使CAN從初始化模式進入正常工作模式。
設置INRQ=1,可使CAN從正常工作模式進入初始化模式。
CAN初始化時,先設置INRQ=1,進入初始化模式,進行初始化(尤其是CAN_BTR的設置,該寄存器,必須在CAN正常工作之前設置),之后再設置INRQ=0,進入正常工作模式。
CAN位時序寄存器(CAN_BTR)設置波特率
CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)
CAN發送郵箱標識符寄存器(CAN_TIxR)(x=0~2)
CAN發送郵箱數據長度和時間戳寄存器 (CAN_TDTxR) (x=0~2)
低4位用于設置發送多少個字節,最多為8個字節
CAN發送郵箱數據寄存器(CAN_TDLxR/CAN_TDHxR) (x=0~2)
CAN接收FIFO郵箱標識符寄存器(CAN_RIxR)(x=0/1)
CAN接收FIFO郵箱數據長度和時間戳寄存器(CAN_RDTxR) (x=0/1)
CAN接收FIFO郵箱郵箱數據寄存器(CAN_RDLxR/CAN_RDHxR) (x=0/1)
CAN篩選器模式寄存器(CAN_FM1R)(0標識符屏蔽,1標識符列表)
CAN篩選器尺度寄存器(CAN_FS1R)(0雙16位,1單32位)
CAN篩選器FIFO關聯寄存器(CAN_FFA1R)(0篩選器分到FIFO0,1篩選器分到FIFO1)
CAN篩選器激活寄存器(CAN_FA1R)(0未激活,1激活)
CAN篩選器組i寄存器x(CAN_FiRx)(i=0~27,x=1/2)(F103篩選器只有14個)
總結
以上是生活随笔為你收集整理的STM32之CAN总线原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim插件和配置
- 下一篇: 泣血推荐丨学编程开始前就该知道的工具集,