Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
arm
国产MCU移植
【国产MCU移植】移植RT-Thread到国产芯片ACM32F0x0芯片
发布于 2021-09-13 11:35:39 浏览:2148
订阅该版
[tocm] ## 硬件简介 ACM32F0X0是上海爱信诺航芯电子科技有限公司研发的面向通用市场、支持多种低功耗模式的一系列通用MCU,采用ARM Cortex-M0系列内核,最高工作频率64MHz,外设接口丰富并延续了公司老牌安全芯片厂商的优势,集成了AES、TRNG等安全模块,细节不在此做详细介绍,如想了解更多细节,请参考[官方网站链接](http://www.aisinochip.com/index.php/product/child1/id/217.html)。 本次移植采用了ACM32F030R8T7型号的开发板,实物如下图所示, ![c258dbcb64e8c4ee4ef5db9bca486e9d.png](https://oss-club.rt-thread.org/uploads/20210913/7f536b4b324b8b746f841525baef3eef.png.webp) 开发板的介绍与使用方法见官网链接。 ## 环境搭建 目前开发板主要是使用keil工具链,[官网链接](http://www.aisinochip.com/index.php/product/detail/id/32.html)可以下载该系列芯片的pack包,安装好pack包后,就可以在keil中选择相应的芯片进行开发调试和仿真。IAR和GCC的话,可以进行编译,但是下载程序可以通过官方的提供的编程工具进行。 ## 移植过程 ### 准备工作 首先,得先准备好RT-Thread的代码,后续我们会把BSP包合入到官方的代码中,所以就按官方推荐的办法,先fork官方的库到自己的git仓库中, 然后clone到本地来,详见RTT官方文档【[https://www.rt-thread.org/document/site/\#/rt-thread-version/rt-thread-standard/development-guide/github/github】](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github】)。 准备好了代码后,就可以按你使用的工具链来进行移植了。不管使用什么工具链,移植的流程大致都是这样的 1. CPU架构的支持, 由于我们的芯片使用的是arm-cortex m0内核,这个架构的支持别人已经做好了,所以这一步我们不需要做任何的工作,若是使用暂时不支持CPU架构就需要自己去做这些工作(RTT源码libcpu目录下的功能函数开发); 2) BSP支持,就是具体的MCU的支持并与使用的开发板上资源对应上。 ### KEIL 首先得建立一个工程,我们可以选择找一个相同的内核的已经做好的BSP目录,复制过来进行改动,比如说我选的是STM32的F0系列的工程。打开工程后如下图所示: ![bd939045de235a24107b4a23b8d393e2.png](https://oss-club.rt-thread.org/uploads/20210913/bd939045de235a24107b4a23b8d393e2.png) 然后按接下来的顺序做修改: 1. 修改Device类型,在工程的Option中选择设备的类型,我这边型号是Aisinochip-\>ACM32F0X0 Series -\> ACM32F070RBT7, 这边按自己的芯片类型选择即可,如果芯片厂商没有给出pack包,那可以直接选择相应的内核,比如我们也可以选择ARMCM0芯片, 只是需要自行去修改SRAM和Flash的地址和大小。 2. 修改输出的文件名和中间文件目录, 按照自己想法修改即可 3. 包含的源文件修改,主要是Libraries文件夹和Drivers文件夹、Libraries是芯片厂商本身的驱动文件,Drivers下是芯片厂商与RTT间适配的文件,我们只使用UART打印输出,使用GPIO点灯,加入这两个模块相关的文件即可,然后修改Drivers下相应的文件,当然, 芯片相应的系统文件(包含启动文件)也要做修改。 4. 源代码修改,主要是Drivers下的文件,这边参考RTT官方文档设备与驱动章节中UART设备与PIN设备内容即可,主要是RTT操作相应设备的API需要使用芯片厂商提供的代码来实现。代码细节的修改不做说明了,需要注意的是尽量按照官方要求的风格来写。 5. 编译通过后,下载bin文件到开发板中查看输出与设想的是否一致即可。 6. 如果前面的步骤正常的完成后,简单的keil工具链的移植已经完成了,但是你肯定看到了,目录下还有一个keil的工程叫template,这个文件是用于生成工程的,比如说我在使用Env工具生成keil工程时,就是使用这些文件生成而来,所以我们还得把这个工程相应的设置给改好,主要是内核的类型和输出文件的名称,你也可以输出的目录做一下整理,修改完成后, 在Env的命令窗口中使用scons --target=mdk5即可以更新keil的工程,该命令只会更新keil工具,并不会实际进行编译。 修改完成后,我的工程如下: ![b8892c65d0983d9a84979cd0b71b0a78.png](https://oss-club.rt-thread.org/uploads/20210913/b8892c65d0983d9a84979cd0b71b0a78.png) 由于我这边使用的模版比较老,所以结构上与stm32上稍有区别,我这边顺手也加入了几个容易处理的模块。 ### IAR IAR的等方面, 处理也和Keil一致,本文不再赘述。 ### GCC 我这边GCC的工具链是直接使用的RTT的Env工具下的,下载Env解压即可。Env是使用scons做编译的,这就涉及到一些文件的修改,其实主要还是Libraries这个目录下的SConsript文件的修改,下面是我这边的Libraries目录下的SConsript文件的内容 ![83782091f12da1aedcb0985959d0c593.png](https://oss-club.rt-thread.org/uploads/20210913/83782091f12da1aedcb0985959d0c593.png) 其实这个文件是一个python脚本文件,脚本的主要工作是把设备对应的启动文件和驱动文件赋值到src变量并合入到’ACM32_HAL’这个组(keil中可以看出效果),把一些需要包含的头文件目录赋值给path变量,值得注意的是,如果是使用Windows进行开发,文件名的大小写是不敏感的,但是官方是使用linux进行编译,此时大小写是敏感的;如果出现了该脚本中的文件名与实际的文件名不匹配的情况,官方的CI测试是通不过的。 修改好了文件后,接下来就是编译,在env工具的命令窗口中输入Scons(Windows下大小写不敏感)命令,就开始了GCC工具链的编译,最终的输出信息如下: ![1e787a7d7866da134debf1280fa0f3b8.png](https://oss-club.rt-thread.org/uploads/20210913/1e787a7d7866da134debf1280fa0f3b8.png) ### KConfig RTT是可以通过KConfig来配置各个模块的功能的,我们的设备的功能也需要做成可以配置的,这时就需要修改KConfig文件。简单来说,KConfig是会把相应的设备在rtconfig.h中生成对应的宏定义。需要修改的就是drivers目录下的KConfig文件,本文件主要目录标是完成最小系统的移植,所以就只对uart的部分做一下说明,下图是我这边的KConfig文件Uart部分的配置: ![c519de4c60320eed6b656e086cf3ac9f.png](https://oss-club.rt-thread.org/uploads/20210913/c519de4c60320eed6b656e086cf3ac9f.png) 主要配置了Uart模块是否打开,相应的RX/TX是否使用DMA功能。我这边做的还不是很完善,其实还可以把RX/TX使用哪个管脚、使用中断模式还是查询模式等都做进去。 文件修改好后,在Env工具的命令窗口中使用menuconfig命令,进入到uart的配置选项后效果如下图: ![c4ed029d0bfd04cdd969efdb1649da3c.png](https://oss-club.rt-thread.org/uploads/20210913/c4ed029d0bfd04cdd969efdb1649da3c.png) 按上图的KConfig在rtconfig.h中的结构如下图: ![309d4df42e33f2230ce149ab80202ffe.png](https://oss-club.rt-thread.org/uploads/20210913/309d4df42e33f2230ce149ab80202ffe.png) ## 测试验证 由于只做了最小的系统,我们的验证工作很简单,就是把生成好的bin文件下载到开发板中,然后观察是否有串口输出RTT的版本信息,用户LED灯是否按我们设计的模式运行即可。
2
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
ze9hyr
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
0
关注TA
发私信
相关文章
1
关于dlmodule的relocation问题
2
复旦微Z7芯片支持问题
3
RTT Cortex R5的移植有谁弄过没?
4
RT-Thread/S3C4510
5
【求助】app能否调用bootloader中的部分文件
6
RT thread支持Arm China Star-SE架构?
7
官方有没有移植到STC32的计划
8
哪些国产MCU移植了rtthread
9
Studio何时能支持其他国产IC
10
rtthread studio增加APM32国产芯片支持
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部