之前我们介绍了MDK和MPLAB开发环境的搭建。MPLAB是官方工具链,支持图形化配置源码等,但是IDE使用上体验不是很好。而MDK是大家比较熟悉的,而且仿真调试用户体验不错,很多时候我们希望能统一开发环境,而使用通用的MDK等。
这里我们有一个折中的方案,使用MHC配置模板工程,配置基本的外设资源,再使用MDK进行仿真调试开发。
我们上一篇讲解了MPLAB开发环境安装,有讲到将mhc下载到了
C:\Users\qinyunti\Harmony3\mhc
也可以直接从git仓库下载
https://gitee.com/Microchip-MPLAB-Harmony/mhc
mhc工具可以单独使用。
进入该文件夹运行runmhc.bat
File -> New configuration
按如下配置
原理图可以看到使用外部12MHz晶振,用的是XOSC1
基本的时钟路径如下
XOSC1->FDPLL200Mn->GCLK->MCLK
配置外部晶振如下
从手册可以看到MCLK最大120MHz,FDPLL最大200MHz
按如下配置得到最大120MHz主频
其他外设时钟等配置按需配置
从原理图可以看到,调试串口用的是S2
添加串口
配置参数如下
添加标准输入输出
将标准输入输出映射到UART
保存工程
生成的工程位于demo\firmware\default.KEIL
打开demo.uvprojx即可
再按照之前创建MDK工程介绍的配置仿真器。
就可以直接仿真运行了。
Main函数中添加一句
SYSTICK_TimerStart(); 启动滴答定时器
printf("Hello Burnon ATSAMD51 EVK");
这里串口的引脚不知道为什么没有初始化,手动配置下
PORT_REGS->GROUP[1].PORT_PINCFG[24] = 0x1U;
PORT_REGS->GROUP[1].PORT_PINCFG[25] = 0x1U;
PORT_REGS->GROUP[1].PORT_PMUX[12] = 0x33U;
连接串口可以看到打印信息
int main ( void )
{
/* Initialize all modules */
SYS_Initialize ( NULL );
SYSTICK_TimerStart();
PORT_REGS->GROUP[1].PORT_PINCFG[24] = 0x1U;
PORT_REGS->GROUP[1].PORT_PINCFG[25] = 0x1U;
PORT_REGS->GROUP[1].PORT_PMUX[12] = 0x33U;
printf("Hello Burnon ATSAMD51 EVK");
while ( true )
{
/* Maintain state machines of all polled MPLAB Harmony modules. */
SYS_Tasks ( );
}
/* Execution should not come here during normal operation */
return ( EXIT_FAILURE );
}
File -> Open Configuration
打开\firmware\src\config\default\default.prj重新配置即可
本文完成了基本的Demo,具备定时器,printf打印基本的功能,后面就可以基于此进行开发。
我们借助HDC自动生成MDK工程代码,然后使用MDK进行仿真调试,结合两者进行开发更加高效。