1寫在前面
該教程前面講述了許多關于CAN協議的一些概念,可能許多初學者看的云里霧里,那么本文將結合代碼讓大家理解之前講述的內容。
因為關注我的人大部分都在學習STM32,我將結合STM32F103、標準外設庫例程來讓大家理解之前講述的一些概念。
本文主要講述內容:
1.傳輸數據相關參數
2.位時序及傳輸波特率
為方便大家理解,我將在最后提供對應例程「CANOpen系列教程06_CAN底層收發例程」。當然,本文只講述代碼中部分內容,某些配置參數放在后面講述。
2
傳輸數據相關參數
傳輸數據相關參數其實主要就是前面《CANOpen系列教程04》講述的“幀類型及格式說明”那一章節內容,建議先看下那些概念內容。
CAN總線傳輸的內容主要就是發送和接收,下面我將結合代碼中發送和接收參數來讓大家理解我們編程控制CAN總線上那些參數。
2.1 CAN總線數據幀
本文提供例程主要是CAN總線使用最多的數據幀為例,讓大家理解數據幀傳輸由我們編程控制的參數。
先看下圖回顧一下數據幀格式,其中有些字段內容由控制器自動完成,如:幀起始,CRC校驗。而有些就是由我們編程控制,如:ID、數據等。
2.2 CAN發送代碼
A.CAN發送數據結構
下圖主要就是CAN發送由我們編程控制的參數。其實你會發現,主要就是上面幀格式中部分內容:ID、IDE、RTR、DLC、Data。
B.發送配置參數
下圖為實際發送配置的參數。
2.3 CAN接收代碼
CAN接收其實和發送類似,CAN總線上的字段就那些,在接收端接收的那些參數無非就是發送端發送出來的那些參數。
針對STM32內部集成的CAN,接收數據結構多了一個FMI參數,大概意思就是接收消息郵箱篩選器索引。
接收操作
為方便初學者理解,這里這要就是使用中斷接收CAN總線數據,在中斷函數里面打印也主要是用于測試,一般實際項目打印不會出現在中斷函數(打印相對耗時)。
3
位時序及傳輸波特率
同樣,在前面《CANOpen系列教程04》中有講述“位時序及傳輸波特率”的概念。其實,位時序間接決定了傳輸的波特率。換句話說,傳輸的波特率由位時序幾個參數決定。
看下圖,回顧一下波特率計算公式:
3.1 波特率配置代碼
結合上圖計算公式和下圖代碼,可以看出位時序中幾個參數和波特率的關系。波特率為1M時,幾個位時序參數可以配置為如下圖值:
提示:
36M代表CAN時鐘,具體要看時鐘相關配置。
波特率固定,位時序參數可以不同。比如波特率固定為1M,位時序參數可以為上圖配置;也可以修改其中的值,如修改位段1為CAN_BS1_5tq,位段2為CAN_BS2_3tq。只要遵循波特率計算公式即可。
-
CAN
+關注
關注
57文章
2772瀏覽量
464419 -
CANopen
+關注
關注
8文章
270瀏覽量
43766 -
代碼
+關注
關注
30文章
4829瀏覽量
69069
發布評論請先 登錄
相關推薦
評論