“本文通过动手实验,从无到有新建立一个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被过滤掉。至此,该动手实验结束。。。