ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

极速移植RT-Thread nano到新唐ARM Cortex-M23系列

2022-04-17 00:01:15  阅读:223  来源: 互联网

标签:RT rt nano Thread CLK void SYS UART0 undefined


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


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

 

可以看到只有AC6可以选择,这说明这个系列是很新的,厂家按照最新的AC6标准做的相关支持文件。

为防止过多的警告,在警告选项里选择AC5-Like

选择新唐的调试器,并设置芯片型号为你当前所用的型号。


接下来在RTE配置里选择以下基本项 
在新建的工程中添加User和Lib目录,用于存放你自己编写的代码和使用到的外设标准库,一般应至少原则如下图中4个基本内容。

接下来配置RTOS的配置文件


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

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

{undefined

    /* 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));

                

                CLK_EnableSysTick(CLK_CLKSEL0_STCLKSEL_HCLK , SystemCoreClock / RT_TICK_PER_SECOND);

    /* 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.12 and TXD=PB.13 */

    SYS->GPB_MFPH = (SYS->GPB_MFPH & ~(SYS_GPB_MFPH_PB12MFP_Msk | SYS_GPB_MFPH_PB13MFP_Msk))    |       \

                    (SYS_GPB_MFPH_PB12MFP_UART0_RXD | SYS_GPB_MFPH_PB13MFP_UART0_TXD);

    /* Lock protected registers */

    SYS_LockReg();

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

{undefined

        rt_os_tick_callback();

}

找到第二条#error TODO2……
该函数为uart_init函数,用于串口的初始化,这里只是用串口打开工具即可,我们开发板
是用的串口0连接电脑的,所以最后应该如下所示
复制
static int uart_init(void)

{undefined

//#error "TODO 2: Enable the hardware uart and config baudrate."

        UART_Open(UART0,115200);

    return 0;

}
找到最后的第三条#error TODO3……
修改如下,直接调用BSP标准库的串口输出函数,一条搞定
复制
void rt_hw_console_output(const char *str)

{undefined

//#error "TODO 3: Output the string 'str' through the uart."

        

        UART_Write(UART0,(uint8_t *)str,rt_strlen(str));

}

第四,找到finsh_port.c中的#error TODO4……
将重定向中用于输出的语句直接复制过来
复制
RT_WEAK char rt_hw_console_getchar(void)

{undefined

    /* Note: the initial value of ch must < 0 */

    int ch = -1;

//#error "TODO 4: Read a char from the uart and assign it to 'ch'."

        if((DEBUG_PORT->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) == 0U)

        {undefined

            return ((char)DEBUG_PORT->DAT);

        }

    return ch;

}
DEBUG_PORT可以换成UART0,或者不换也行,因为
在system_M261.h头文件中定义了该宏为替代UART0。

最后完成各简单的main.c文件中的main函数,使用RTT提供的打印与延时函数测试移植是否成功。
复制
#include<rtthread.h>

#include<NuMicro.h>

int main(void)

{undefined

        GPIO_SetMode(PB,BIT10,GPIO_MODE_OUTPUT);

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

        while(1)

        {undefined

                rt_thread_mdelay(500);

                PB10 ^=1;

        }

}


最后一步,保存,编译

打开串口助手后,然后点下载,观察串口助手打印的消息

搞定,同时开发板上的LED开始闪烁,说明延时函数和串口打印都移植成功,系统已经控制滴答定时器也正常工作。

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

所以比M0和M4系列的移植还要简单。
此文章已获得原创/原创奖标签,著作权归21ic所有,未经允许禁止转载。
---------------------
作者:gaoyang9992006
链接:https://bbs.21ic.com/icview-3161494-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

标签:RT,rt,nano,Thread,CLK,void,SYS,UART0,undefined
来源: https://www.cnblogs.com/ic-dianzi/p/16154728.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有