“本文通過動手實驗,從無到有新建立一個MCU軟件工程,實現MCP2518FD的初始化和CAN FD報文發送與接收。”
雖然本專題上一篇文章已經介紹了基于MCP2518FD+ATA6563實現外擴CAN/CAN FD接口的設計過程,但在ATSAMD21G17D具體操作MCP2518FD的過程中可能還會碰到這樣那樣的問題,因此這里從無到有新建一個·工程,用一步一步的記錄展示完成上篇文章提到的軟件實現,使大家有一個更直觀的認識,方便大家評估軟件開發的工作量。
本實驗主要基于32位MCU的開發環境MPLAB® Harmony v3來完成,若您沒有安裝相關開發環境,請參考微信公眾號王超的小站"開發工具->工具安裝",依次安裝如下幾個部分,然后進入動手實驗環節。
1)MPLAB® X IDE
2)MPLAB® XC32
3)MPLAB® Harmony v3
4)MPLAB® Data Visualizer
1. 新建工程
1)打開MPLAB® X IDE,選擇“File->New Project”。
2)彈出對話框選擇32-bit MPLAB Harmony 3 Project, 點擊“Next”按鈕進入下一步。
3)框架路徑設置為MPLAB® Harmony v3安裝過程中git到本地的內容所在的文件夾,然后點擊“Next”按鈕進入下一步。
4)設置工程所在的文件夾和工程名稱(這里將工程命名為mcp2518fd_demo),然后點擊“Next”按鈕進入下一步。
5)選擇器件,這里根據實驗選擇32位Coretx-M0+ MCU ATSAMD21G17D,然后點擊“Finish”按鈕進入下一步。
6)mcp2518fd_demo空工程建立后的界面如下。
2. MHC(MPLAB Harmony Configurator)啟動
1)新建工程后會自動彈出如下界面,DFP和CMSIS選擇默認配置,然后點擊“Launch”按鈕啟動MHC。該界面在下次打開工程時也可以用戶手動彈出,在MAPLAB X IDE環境下,點擊菜單欄Tools->MPLAB® Harmony 3 Configurator即可。
2)MHC啟動后的界面如下。
3. MHC中Pin配置
1)在MHC界面,選擇Tools->Pin Configuration。
2)在Pin Settings界面,根據上篇文章提到的軟硬件接口表設置如下IO。
3)在Pin Table界面,根據上篇文章提到的軟硬件接口表設置SPI和USART,這兩個串口通訊都是借助ATSAMD21的SERCOM外設實現,該外設可根據用戶需要作為SPI、USART或I2C,非常靈活。這里ATSAMD21將SERCOM1作為與MCP2518FD通信的SPI外設,將SERCOM5作為與電腦串口終端的USART外設。
4. MHC中外設添加
1)在MHC界面,雙擊或拖拽的方式將左側外設下的SERCOM1和SERCOM5,及Tools下的STDIO添加到Project Graph下。
2)SERCOM1設置:點擊SERCOM1后在右側可以看到其配置界面,綠色底色代表相較默認值做了更改。這里將SPI時鐘速率設置為10MHz,SPI模式選擇MCP2518FD認可的模式0,相應的pad根據上述pin設置進行調整。
3)SERCOM5設置:點擊SERCOM5后在右側可以看到其配置界面,綠色底色代表相較默認值做了更改。這里將USART波特率設置為115200Hz,8位數據位,1位停止位,無奇偶校驗。同時將SERCOM5的UART口和STDIO的UART口相連,這樣生成代碼后用戶可以在工程中直接調用打印函數printf。
5. MHC中系統滴答定時器添加
點擊System后在右側可以看到其配置界面,綠色底色代表相較默認值做了更改,如下設置代表在生成代碼后用戶可以在工程中直接調用SYSTICK_DelayMs函數。
6. MHC中時鐘相關配置
1)在MHC界面,選擇Tools->Clock Configuration。
2)時鐘配置保持默認即可,可以看出SERCOM1和SERCOM5的外設時鐘默認是48MHz。
7. MHC生成代碼
1)如上配置保存后,在MHC界面選擇Generate->Generate Code。
2)彈出如下界面后點擊“Generate”按鈕生成代碼。
3)代碼生成過程中。。。完成后會自動關閉該界面。
4)此時在工程目錄下將包含MHC生成的外設等代碼,還包含一個基本的main.c。
8. 添加其他工程代碼
1)將MCP2518FD的driver、測試app和實驗main.c拷貝到工程目錄。
2)將上述driver、app文件夾下的.c和.h添加到工程中;main.c因為是替換不用添加。
3)工程頭文件路徑添加,添加文件夾drever/mcp2518fd_driver和app。
9. 器件編程及實驗結果驗證
1)按如下圖選擇仿真器和編譯器,點擊“Apply”后點擊“OK”按鈕。
2)點擊“編譯下載”按鈕,將程序燒錄到ATSAMD21G17D中。
3)選擇“Tools->Embedded->Data Visualizer”。
4)設置波特率115200。
5)選擇Send to terminal,開始接收ATSAMD21打印的報文消息。
6)串口終端顯示報文ID 0x300~0x307可靠接收,報文ID 0x308~0x30f被過濾掉。至此,該動手實驗結束。。。