NuMicro M0A23 系列是基于 Arm Cortex -M0 内核的 32 位微控制器。它的工作温度范围达 -40°C 至 125°C,在小封装中提供 CAN 功能,丰富的仿真外设及弹性的引脚分配功能。2.4V 至 5.5V 的工作电压。NuMicro M0A23 系列针对工控和较高的工作温度应用,如雷达,电池管理系统 (BMS),汽车照明,车用控制及工控传感器等应用。

之前我发过一个帖,移植RTT到NUC029上的帖,这次拿到新的开发板,我们试试能否轻松移植RTT到这个M0A23开发板。

准备工具 Keil V5,在pack里安装RTOS,如下图所示

rt-thread线程运行机制(我只用了十分钟)(1)

接下来新建工程,工程目录存放M0A23的Lib文件

rt-thread线程运行机制(我只用了十分钟)(2)

然后按照RTE的创建工程方式,添加启动文件与RTT RTOS文件到工程

rt-thread线程运行机制(我只用了十分钟)(3)

在工程创建目录,添加USER文件和Lib文件

rt-thread线程运行机制(我只用了十分钟)(4)

最后对工程配置进行修改,因为要用stdio.h

所以在Target选项卡勾选Use MicroLIB,同时选中编译器为V5版本

rt-thread线程运行机制(我只用了十分钟)(5)

在C/C 选项卡设置头文件路径

.\Library\Device\Nuvoton\M0A21\include;.\Library\StdDriver\inc;.\Library\CMSIS\Include

复制代码在Linker选项卡设置Misc controls

--map --first='startup_M0A21.o(RESET)' --datacompressor=off --info=inline --entry Reset_Handler

复制代码在调试器设置对应的调试器,并选择为自动侦测模式

rt-thread线程运行机制(我只用了十分钟)(6)

配置烧录功能如下

rt-thread线程运行机制(我只用了十分钟)(7)

基本配置到此完成,接下来进行RTT移植修改。

在board.c文件中进行时钟与串口的初始化配置,同时别忘了将头文件NUMicro.h包含进来。

可以直接将M0A23的BSP中的模板配置复制来用即可

void SYS_Init(void)

{

/* Unlock protected registers */

SYS_UnlockReg();

/* Enable HIRC clock (Internal RC 48MHz) */

CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

/* Wait for HIRC clock ready */

CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

/* Select HCLK clock source as HIRC and HCLK source divider as 1 */

CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

/* Enable UART0 clock */

CLK_EnableModuleClock(UART0_MODULE);

/* Switch UART0 clock source to HIRC */

CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

/* Update System Core Clock */

SystemCoreClockUpdate();

/* Set PB multi-function pins for UART0 RXD=PB.6 and TXD=PB.4 */

SYS->GPB_MFP1 = (SYS->GPB_MFP1 & ~(SYS_GPB_MFP1_PB4MFP_Msk | SYS_GPB_MFP1_PB6MFP_Msk)) | \

(SYS_GPB_MFP1_PB4MFP_UART0_TXD | SYS_GPB_MFP1_PB6MFP_UART0_RXD);

/* Lock protected registers */

SYS_LockReg();

UART_Open(UART0, 115200);

}

复制代码然后在rt_hw_board_init()

中引用该初始化并删除该函数中的时钟更新函数,因为我们已经在上面的函数完成了该操作。

接下来在该文件末尾添加

void rt_hw_console_output(const char *str)

{

printf("%s",str);

}

char rt_hw_console_getchar(void)

{

return getchar();

}

复制代码以实现串口打印与交互输入。

然后我们发现,工程的启动文件目录有重定向文件,我们用库函数中的进行替换该文件。

然后找到

__asm int32_t HardFault_Handler(void)

该函数,并注释掉该函数,因为RTT中已经实现了该函数,不然就重复定义了。另外就是通过rtconfig.h启用某些功能了,支持配置向导模式

rt-thread线程运行机制(我只用了十分钟)(8)

接下来保存工程,在main.c添加个简单的代码

#include

#include "NuMicro.h"

#include

int main(void)

{

return 0;

}

复制代码

编译,一次通过。

".\Objects\demo.axf" - 0 Error(s), 0 Warning(s).

复制代码下载测试

rt-thread线程运行机制(我只用了十分钟)(9)

这里提供工程供大家测试学习

rt-thread线程运行机制(我只用了十分钟)(10)

M0A23_RTT.rar

复制粘贴后,文末增加:原标题:新唐新出单片机M0A23移植RT-Thread竟然这么容易,十分钟搞定原作者:gaoyang9992006本文为21ic有奖征文作品,详情请见21ic论坛活动专区:第二届万元红包——蓝V达人有奖征文活动,如果您也有兴趣参与征文,欢迎进入论坛参与活动~

,