1.CAN控制器
2.CAN收發器:CAN收發器的作用是負責邏輯電平和信號電平之間的轉換。
即從CAN控制芯片輸出邏輯電平到CAN收發器,然后經過CAN收發器內部轉換將邏輯電平轉換為差分信號輸出到CAN總線上,CAN總線上的節點都可以決定自己是否需要總線上的數據。
二、CAN的配置
void CAN1_Config_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
三、CAN波特率計算公式
CAN波特率=系統時鐘/分頻數/(1*tq+tBS1+tBS2)
其中
tBS1=tq*(TS1[3:0]+1)
tBS2=tq*(TS2[2:0]+1)
tq=(BRP[9:0]+1)*tPCLK
這里tq表示1個時間單元
tPCLK=APB時鐘的時間周期
BRP[9:0],TS1[3:0]和TS2[2:0]在CAN_BTR寄存器中定義
總體配置保持
tBS1>=tBS2,tBS2>=1個CAN時鐘周期,tBS2>=2tSJW
四、CAN的發送與CAN的接收
1、發送過程:CAN控制器將CPU傳來的信號轉換為邏輯電平(即邏輯0-顯性電平或者邏輯1-隱性電平)。CAN發射器接收邏輯電平之后,再將其轉換為差分電平輸出到CAN總線上。
2、接收過程:CAN接收器將CAN_H 和 CAN_L 線上傳來的差分電平轉換為邏輯電平輸出到CAN控制器,CAN控制器再把該邏輯電平轉化為相應的信號發送到CPU上。
五、STM32 CAN控制器簡介-發送流程和接收流程
程序選擇1個空置的郵箱(TME=1)->設置標識符(ID),數據長度和發送數據->設置CAN_TIxR的TXRQ位為1,請求發送->郵箱掛號(等待成為最高優先級)->預定發送(等待總線空閑)->發送->郵箱空置
FIFO空->收到有效報文->掛號_1(存入FIFO的一個郵箱,這個由硬件控制,我們不需要理會)->收到有效報文->掛號_2->收到有效報文->掛號_3->收到有效報文->溢出。
CAN收到的有效報文,存儲在3級郵箱深度的FIFO中。FIFO接收到的報文數,我們可以通過查詢CAN_RFxR的FMP寄存器來得到,只要FMP不為0,我們就可以從FIFO讀出收到的報文。
審核編輯:湯梓紅
-
收發器
+關注
關注
10文章
3424瀏覽量
105960 -
控制器
+關注
關注
112文章
16332瀏覽量
177806 -
CAN
+關注
關注
57文章
2744瀏覽量
463615 -
通信
+關注
關注
18文章
6024瀏覽量
135950 -
總線
+關注
關注
10文章
2878瀏覽量
88051
原文標題:CAN總線通信
文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論