1. 程式人生 > >CANOpen系列教程06_結合程式碼理解CAN底層收發資料(含STM32例程)

CANOpen系列教程06_結合程式碼理解CAN底層收發資料(含STM32例程)

該系列教程已經在我的個人微信公眾號**「strongerHuang」**整理並分享。因在這裡分享文章,還需單獨整理一遍,時間有限,就不再一一重複整理出來了。

想要檢視更多相關教程,可以關注我的個人微信公眾號「strongerHuang」,回覆【CANOpen系列教程】即可檢視。

申明:該文件由作者「strongerHuang」原創釋出,僅供個人學習使用,轉載請公眾號聯絡作者授權。版權所有,禁止商用

一、寫在前面

該教程前面講述了許多關於CAN協議的一些概念,可能許多初學者看的雲裡霧裡,那麼本文將結合程式碼讓大家理解之前講述的內容。

因為關注我的人大部分都在學習STM32,我將結合STM32F103、標準外設庫例程來讓大家理解之前講述的一些概念。

本文主要講述內容:
  ·1.傳輸資料相關引數
  ·2.位時序及傳輸波特率

為方便大家理解,我將在最後提供對應例程「CANOpen系列教程06_CAN底層收發例程」。當然,本文只講述程式碼中部分內容,某些配置引數放在後面講述。

二、傳輸資料相關引數

傳輸資料相關引數其實主要就是前面《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匯流排資料,在中斷函式裡面列印也主要是用於測試,一般實際專案列印不會出現在中斷函式(列印相對耗時)。

三、位時序及傳輸波特率

同樣,在前面《CANOpen系列教程04》中有講述“位時序及傳輸波特率”的概念。其實,位時序間接決定了傳輸的波特率。換句話說,傳輸的波特率由位時序幾個引數決定。

看下圖,回顧一下波特率計算公式:

3.1 波特率配置程式碼

結合上圖計算公式和下圖程式碼,可以看出位時序中幾個引數和波特率的關係。波特率為1M時,幾個位時序引數可以配置為如下圖值:

提示:
36M代表CAN時鐘,具體要看時鐘相關配置。

波特率固定,位時序引數可以不同。比如波特率固定為1M,位時序引數可以為上圖配置;也可以修改其中的值,如修改位段1為CAN_BS1_5tq,位段2為CAN_BS2_3tq。只要遵循波特率計算公式即可。

四、例程下載

提示:
連結後期可能會失效,可關注公眾號回覆【CANOpen系列教程】檢視更新連結。

五、說明

1.該文件部分內容來自網路,僅供個人學習使用,版權所有,禁止商用。

2.本文由我一個人編輯並整理,難免存在一些錯誤。

3.為了方便大家平時公交、地鐵、外出辦事也能用手機隨時隨地檢視該教程,該系列教程已更新於微信公眾號【strongerHuang】,關注微信公眾號回覆【CANOpen系列教程】即可檢視全系列教程。

六、最後

我的微信公眾號(ID:strongerHuang)還在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩內容,如果想檢視更多內容,可以關注我的微信公眾號。