返回列表 发新帖我要提问本帖赏金: 60.00元(功能说明)

[牛人杂谈] 极速移植RT-Thread nano到新唐ARM Cortex-M23系列

[复制链接]
6803|3
 楼主| gaoyang9992006 发表于 2021-9-4 09:12 | 显示全部楼层 |阅读模式
本帖最后由 gaoyang9992006 于 2021-9-4 10:32 编辑

#申请原创# @21小跑堂
前提,安装好Keil for arm,安装好新唐pack,下载好新唐的BSP标准库文件。
新建文件夹用于存储接下来的工程文件。
本次演示采用的新唐M263A系列开发板


新建Keil工程,找到新唐目录,选择M23系列中你所使用的哪款单片机,本次选择M263KIAAE
555366132c46ae5da1.png

230636132c557dc266.png
可以看到只有AC6可以选择,这说明这个系列是很新的,厂家按照最新的AC6标准做的相关支持文件。
786206132c59eef7cd.png
为防止过多的警告,在警告选项里选择AC5-Like
956456132c5cd99339.png
选择新唐的调试器,并设置芯片型号为你当前所用的型号。
接下来在RTE配置里选择以下基本项 207626132c7f1d99b5.png
在新建的工程中添加User和Lib目录,用于存放你自己编写的代码和使用到的外设标准库,一般应至少原则如下图中4个基本内容。

140006132c87d71133.png

接下来配置RTOS的配置文件
512196132c9bb6cbed.png

在board.c和finsh_port.c中引入新唐头文件

#include <NuMicro.h>
然后在board.c中按照预编译错误提示,完成每一项的内容,一共4项
1,找到M263的BSP,将模板工程中的系统初始化函数复制进来,并再其中
增加一条使能滴答时钟的函数。
  1. void SYS_Init(void)
  2. {
  3.     /* Unlock protected registers */
  4.     SYS_UnlockReg();

  5.     /* Enable HIRC clock (Internal RC 48MHz) */
  6.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  7.     /* Wait for HIRC clock ready */
  8.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  9.     /* Select HCLK clock source as HIRC and HCLK source divider as 1 */
  10.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));
  11.                
  12.                 CLK_EnableSysTick(CLK_CLKSEL0_STCLKSEL_HCLK , SystemCoreClock / RT_TICK_PER_SECOND);

  13.     /* Enable UART0 clock */
  14.     CLK_EnableModuleClock(UART0_MODULE);

  15.     /* Switch UART0 clock source to HIRC */
  16.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART0SEL_HIRC, CLK_CLKDIV0_UART0(1));

  17.     /* Update System Core Clock */
  18.     SystemCoreClockUpdate();

  19.     /* Set PB multi-function pins for UART0 RXD=PB.12 and TXD=PB.13 */
  20.     SYS->GPB_MFPH = (SYS->GPB_MFPH & ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk))    |       \
  21.                     (SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD);

  22.     /* Lock protected registers */
  23.     SYS_LockReg();
  24. }
下面这句是我们自己新增的
  1. CLK_EnableSysTick(CLK_CLKSEL0_STCLKSEL_HCLK , SystemCoreClock / RT_TICK_PER_SECOND);
然后引用到该文件中rt_hw_board_init()函数中
并屏蔽掉该函数中的第一条#error TODO 1……
并在rt_os_tick_callback()函数后完善滴答定时器中断入口函数
  1. void SysTick_Handler(void)
  2. {
  3.         rt_os_tick_callback();
  4. }



找到第二条#error TODO2……
该函数为uart_init函数,用于串口的初始化,这里只是用串口打开工具即可,我们开发板上
是用的串口0连接电脑的,所以最后应该如下所示
  1. static int uart_init(void)
  2. {
  3. //#error "TODO 2: Enable the hardware uart and config baudrate."
  4.         UART_Open(UART0,115200);
  5.     return 0;
  6. }
找到最后的第三条#error TODO3……
修改如下,直接调用BSP标准库的串口输出函数,一条搞定
  1. void rt_hw_console_output(const char *str)
  2. {
  3. //#error "TODO 3: Output the string 'str' through the uart."
  4.         
  5.         UART_Write(UART0,(uint8_t *)str,rt_strlen(str));
  6. }
第四,找到finsh_port.c中的#error TODO4……
将重定向中用于输出的语句直接复制过来
  1. RT_WEAK char rt_hw_console_getchar(void)
  2. {
  3.     /* Note: the initial value of ch must < 0 */
  4.     int ch = -1;

  5. //#error "TODO 4: Read a char from the uart and assign it to 'ch'."
  6.         if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0U)
  7.         {
  8.             return ((char)DEBUG_PORT->DAT);
  9.         }
  10.     return ch;
  11. }
DEBUG_PORT可以换成UART0,或者不换也行,因为
在system_M261.h头文件中定义了该宏为替代UART0。

最后完成各简单的main.c文件中的main函数,使用RTT提供的打印与延时函数测试移植是否成功。
  1. #include<rtthread.h>
  2. #include<NuMicro.h>
  3. int main(void)
  4. {
  5.         GPIO_SetMode(PB,BIT10,GPIO_MODE_OUTPUT);

  6.         rt_kprintf("Hello,M263!\n");

  7.         while(1)
  8.         {
  9.                 rt_thread_mdelay(500);
  10.                 PB10 ^=1;
  11.         }

  12. }

最后一步,保存,编译
374006132cd591e7aa.png
打开串口助手后,然后点下载,观察串口助手打印的消息
557566132ce24dbfef.png
搞定,同时开发板上的LED开始闪烁,说明延时函数和串口打印都移植成功,系统已经控制滴答定时器也正常工作。

注意:这里我们不用去重定向文件屏蔽硬件错误中断,因为重定向文件中用了新的函数名字,跟RTOS用的不重合,不冲突。

所以比M0和M4系列的移植还要简单。

打赏榜单

21小跑堂 打赏了 60.00 元 2021-09-07
理由:恭喜通过原创文章审核!请多多加油哦!

 楼主| gaoyang9992006 发表于 2021-9-4 09:55 | 显示全部楼层
有没有发现,新唐的库函数做的比STM32的更容易上手,更加友好。
weifeng90 发表于 2021-9-9 21:03 来自手机 | 显示全部楼层
还真是这样,哈哈。
 楼主| gaoyang9992006 发表于 2021-9-9 22:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:如果你觉得我的分享或者答复还可以,请给我点赞,谢谢。

2052

主题

16403

帖子

222

粉丝
快速回复 在线客服 返回列表 返回顶部