我只用了十分钟:将RT-Thread移植到了新唐新款单片机上
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,如下图所示
接下来新建工程,工程目录存放M0A23的Lib文件
然后按照RTE的创建工程方式,添加启动文件与RTT RTOS文件到工程
在工程创建目录,添加USER文件和Lib文件
最后对工程配置进行修改,因为要用stdio.h
所以在Target选项卡勾选Use MicroLIB,同时选中编译器为V5版本
在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
复制代码在调试器设置对应的调试器,并选择为自动侦测模式
配置烧录功能如下
基本配置到此完成,接下来进行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启用某些功能了,支持配置向导模式
接下来保存工程,在main.c添加个简单的代码
#include
#include "NuMicro.h"
#include
int main(void)
{
return 0;
}
复制代码
编译,一次通过。
".\Objects\demo.axf" - 0 Error(s), 0 Warning(s).
复制代码下载测试
这里提供工程供大家测试学习
M0A23_RTT.rar
复制粘贴后,文末增加:原标题:新唐新出单片机M0A23移植RT-Thread竟然这么容易,十分钟搞定 原作者:gaoyang9992006 本文为21ic有奖征文作品,详情请见21ic论坛活动专区:第二届万元红包——蓝V达人有奖征文活动,如果您也有兴趣参与征文,欢迎进入论坛参与活动~
超简单!国产RT-thread操作系统在国民技术单片机上移植
各位嵌入式软件工程师想必都有类似的经验,使用无操作系统开发单片机式对于时序把控、任务延时及各任务之间的通信很难实现完整地条理清晰地编码。
对于部分经验不足的工程师,总会存在各种各样的问题,如因为变量、参数函数位置以及延时方法等导致程序运行效率过低的情况。实时操作系统能很好地解决这些问题。一般无操作系统的情况下,经验丰富的工程师可能会使用状态机加定时器等实现任务的非阻塞延时,使用软件定时器加回调函数实现简单的定时任务等。在操作系统中,可以统一使用系统延时rt_thread_mdelay来解决问题,操作方法类似于最开始学习单片机时的delay()函数一样,无需担心任务卡死。在简单的应用中,如果使用多个任务,完全可以不用考虑系统会卡死。当然,该操作系统还有更高级的功能,此处不作赘述。
资料准备
本次移植基于国民的n32g430芯片进行移植,首先需要以下链接:
国民技术:ftp://download.nationstech.com/
RT-Thread: https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction
软件:KEIL5,笔者使用得是5.27版本
开发板:淘宝随便找一个国民技术的N32G430开发板
下载国民技术的基础资料包,直接将国民的链接粘贴在文件夹路径框(FTP传输),找到如下文件:
解压后找到,此文件为国民的基本支持包:
下载RTT NANO版本:
建议使用手动下载安装:
下载如下
安装
Keil安装完成的情况下,分别将RealThread.RT-Thread.3.1.5.pack及Nations.N32G430_DFP.1.1.0.pack双击安装,无需其他设置步骤,软件会自动安装到位。
创建工程
先创建一个demo工程,选择国民的n32g430芯片,确认后软件自动进入组件选择。
组件选择:选中如下的内容;
如果弹出报错,先截个图,稍后手动拷贝,由于安装时firmware并不会安装到位,一般是手动拷贝的,此处手动从国民的SDK中拷贝;
Firmware路径:
按照下图创建目录拷贝即可:
接下来,进入组件管理界面:
在刚在的工程文件夹下找到以下文件:
\Device\N32G430K8L7\CMSIS\device\system_n32g430.c
\Device\N32G430K8L7\CMSIS\device\startup\startup_n32g430.s
\Device\N32G430K8L7\n32g430_std_periph_driver\src\misc.c
\Device\N32G430K8L7\n32g430_std_periph_driver\src\n32g430_rcc.c
\Device\N32G430K8L7\n32g430_std_periph_driver\src\n32g430_gpio.c
双击添加
选择编译器,此步骤不选没法编译:
之后返回组件选择,仅保留RTT部分,前边选组件只是为了保证后续手动移植时知道选择哪些文件以及从哪里拷贝文件,目标文件在哪里等。
接下来配置工程的包含路径:
添加路径:
接下来进行第一次编译;
出现如下报错证明文件基本移植完成,接下来可以处理系统对接相关内容。
首先处理系统时钟:
接下来添加main文件,先建立user文件夹,在文件夹下添加main.c文件,并将文件添加至工程。
简单写一个空的main函数,开始编译:
编译完成,仅一个告警,问题不大,可以忽略。
接下来处理系统打印,打开控制台功能:
Main任务写个简单的打印,编译:
至此,移植全部完成,接下来下载编译即可,此处不再赘述。
相关问答
如何在 单片机 装Linux 系统 ?按道理来说有这几年经验,应该已经熟悉了几款单片机,像stm系列或者ti的,这样应该对soc的体系结构比较了解,一般单片机是在Windows下开发,熟悉一些总线,熟悉...
单片机 程序可以 移植 到Linux吗?单片机程序与Linux系统的底层架构和编程语言不同,因此不能直接移植。单片机程序是针对特定硬件设计的,而Linux是一个通用操作系统,需要使用C或其他高级编程语...
将lua 移植 到 单片机 可行吗?luaflash需求约50KB,ram需求约30KB。这个配置以上基本就可以运行,网上有很多32位单片机移植的案例。但对于8位16位单片机,移植lua还是太费资源了。再说移植好...
有没有,大神, 移植 ,过ucos 2到stc的, 单片机 ?首先STC的单片机ROM和RAM的空间很有限,移植UCOS系统是不可以的,就UCOS的的系统就占用ROM几K,RAM可以几十K,你说51单片机有这个资源吗。首先STC的单片机ROM和R...
高级语言编写 单片机 程序的缺陷-牌子网高级语言可以实现更为优化的算法,更为方便的执行方案,但是,高级语言对程序存储空间的占用要比汇编和C语言多很多。这是最致命的一点,单片机有限的存...
STM32F103 单片机 与AD7705之间的AD转换数据采集程序?[回答]找个其他单片机的c移植一下咯,还有注意cs引脚和其他引脚的配置,有时候配置为上拉等会有影响
单片机 开发中,为什么经常选用C语言和汇编语言? 申请方单片机开发经常使用汇编语言和C语言,是因为这两个语言有相对于其他语言的优势的。先说C语言吧。1、编译器容易实现。c能轻易地翻译成汇编,尤其是简...
单片机 为什么还在用C语言编程?单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言。这个问题的意思应该是:现在有很多很好用的高级语言,如java,python,VC等等,为...单片...
QT编程语言可以嫁接到 单片机 上面运行吗?可以的,以下是关于QT开发平台和arm嵌入式的关系QT包括普通窗口界面下的和嵌入式下的嵌入式QT也叫QT/Embeded,是应用在嵌入式linux系统上的GUI应用程序运行环...
单片机 用C语言编程很好学,为什么还要用汇编呢?现在一般单片机都支持C语言和晦涩难懂的汇编语言,在许多介绍单片机应用技术的教材中有相当一部分是用汇编语言编写的这说明汇编语言在学习单片机和编写单片机程...