|
NuMicro M0A23 系列是基于 Arm Cortex -M0 內核的 32 位微控制器。它的工作溫度范圍達 -40°C 至 125°C,在小封裝中提供 CAN 功能,豐富的仿真外設及彈性的引腳分配功能。2.4V 至 5.5V 的工作電壓。NuMicro M0A23 系列針對工控和較高的工作溫度應用,如雷達,電池管理系統(tǒng) (BMS),汽車照明,車用控制及工控傳感器等應用。
之前我發(fā)過一個帖,移植RTT到NUC029上的帖,這次拿到新的開發(fā)板,我們試試能否輕松移植RTT到這個M0A23開發(fā)板。
準備工具 Keil V5,在pack里安裝RTOS,如下圖所示
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-1.jpg (226.26 KB, 下載次數(shù): 18)
下載附件
保存到相冊
2022-7-15 22:39 上傳
接下來新建工程,工程目錄存放M0A23的Lib文件
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-2.jpg (50.06 KB, 下載次數(shù): 33)
下載附件
保存到相冊
2022-7-15 22:39 上傳
然后按照RTE的創(chuàng)建工程方式,添加啟動文件與RTT RTOS文件到工程
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-3.jpg (137.56 KB, 下載次數(shù): 22)
下載附件
保存到相冊
2022-7-15 22:39 上傳
在工程創(chuàng)建目錄,添加USER文件和Lib文件
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-4.jpg (94.84 KB, 下載次數(shù): 23)
下載附件
保存到相冊
2022-7-15 22:39 上傳
最后對工程配置進行修改,因為要用stdio.h
所以在Target選項卡勾選Use MicroLIB,同時選中編譯器為V5版本
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-5.jpg (140.58 KB, 下載次數(shù): 33)
下載附件
保存到相冊
2022-7-15 22:39 上傳
在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
復制代碼在調試器設置對應的調試器,并選擇為自動偵測模式
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-6.jpg (135.36 KB, 下載次數(shù): 27)
下載附件
保存到相冊
2022-7-15 22:39 上傳
配置燒錄功能如下
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-7.jpg (114.64 KB, 下載次數(shù): 25)
下載附件
保存到相冊
2022-7-15 22:39 上傳
基本配置到此完成,接下來進行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()
中引用該初始化并刪除該函數(shù)中的時鐘更新函數(shù),因為我們已經在上面的函數(shù)完成了該操作。
接下來在該文件末尾添加
void rt_hw_console_output(const char *str)
{
printf("%s",str);
}
char rt_hw_console_getchar(void)
{
return getchar();
}
復制代碼以實現(xiàn)串口打印與交互輸入。
然后我們發(fā)現(xiàn),工程的啟動文件目錄有重定向文件,我們用庫函數(shù)中的進行替換該文件。
然后找到
__asm int32_t HardFault_Handler(void)
該函數(shù),并注釋掉該函數(shù),因為RTT中已經實現(xiàn)了該函數(shù),不然就重復定義了。另外就是通過rtconfig.h啟用某些功能了,支持配置向導模式
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-8.jpg (249.31 KB, 下載次數(shù): 31)
下載附件
保存到相冊
2022-7-15 22:39 上傳
接下來保存工程,在main.c添加個簡單的代碼
#include <stdio.h>
#include "NuMicro.h"
#include <rtthread.h>
int main(void)
{
return 0;
}
復制代碼
編譯,一次通過。
".\Objects\demo.axf" - 0 Error(s), 0 Warning(s).
復制代碼下載測試
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-9.jpg (99.19 KB, 下載次數(shù): 22)
下載附件
保存到相冊
2022-7-15 22:39 上傳
這里提供工程供大家測試學習
新唐新出單片機M0A23移植RT-Thread竟然這么容易,十分鐘搞定。-10.jpg (2.15 KB, 下載次數(shù): 37)
下載附件
保存到相冊
2022-7-15 22:39 上傳
M0A23_RTT.rar |
|