Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PIN_GPIO通用驱动
UART
国产MCU移植
【国产MCU移植】移植RT-Thread到国产芯片HC32F460PETB
发布于 2021-09-05 21:43:02 浏览:5132
订阅该版
#移植前的准备 ##前提 现在芯片价格不断上涨,国内很多厂商也在不断的找替换方案。虽然公司对芯片价格不是很敏感,作为新生代农民工菊花还是紧了紧,主动要求替换国产芯片本来想使用GD系列,领导拍板使用华大的,最终我选择了HC32F460PETB。 最近rt-thread举办【国产MCU移植】活动,工作人员建议我把原先移植nano版本基础上提交PR,刚好练练手。 HC32F460基于Keil MDK 移植 RT-Thread Nano https://club.rt-thread.org/ask/article/2966.html ##硬件 - 芯片型号:HC32F460PETB - 芯片内核:ARM Cortex M4 - 芯片主频:最高200MHz - 片内SRAM:192K - 片内FLASH:512K ##目标 - 环境搭建 - 基础工程 - 验证工程 #移植过程 ##1.环境搭建 安装KEIL5。 安装HC32F460的pack:HDSC.HC32F460.1.0.7.pack,官网下载链接: http://www.hdsc.com.cn/Category83-1487 ![pack包.png](https://oss-club.rt-thread.org/uploads/20210821/6cdcba838dfcf7cfcd682cdbf06dcd82.png.webp) 串口助手 - MobaXterm ##2.基础工程 ###1.准备rt-thread-master源码包 下载地址: https://gitee.com/rtthread/rt-thread ###2.准备模版 查找基础模板华大系列bsp包,rt-thread代码仓库中已存在hc32f4a0,复制一份文件夹名修改为hc32f460 ![复制一份.png](https://oss-club.rt-thread.org/uploads/20210904/9726cf074052e3ddad30d0cf4c571967.png) 按照目录文件顺序依次做修改 ![修改目录.png](https://oss-club.rt-thread.org/uploads/20210904/8a069944246a5aa8166e1dd3255f4dce.png) ###3.修改模版 修改hc32f460\application目录下main.c ![main.png](https://oss-club.rt-thread.org/uploads/20210905/681d749a2e11fb2cc8a8c9e3747b924d.png.webp) `hc32f460\application`目录下SConscript 不做修改,可以继续使用 修改`hc32f460\board\linker_scripts`目录下link.sct,此文件为链接文件需要根据芯片资料修改 ![link脚本.png](https://oss-club.rt-thread.org/uploads/20210905/64b0d355b78674e0abb44e14ac8c6d23.png) 修改`hc32f460\board`目录下board.c,此文件为芯片提供芯片时钟配置、系统时钟配置、滴答定时器、堆栈初始化、rtt Components初始化、console设置 ![boardc.png](https://oss-club.rt-thread.org/uploads/20210905/ba615eb43990552a1dbb7afcd59ebc0e.png.webp) 修改`hc32f460\board`目录下board.h,设置堆栈其实位置、大小。 修改`hc32f460\board`目录下board_config.c,初始化串口引脚 ![borad_configc.png](https://oss-club.rt-thread.org/uploads/20210905/922e424e71eb25171c03b860a939c38f.png.webp) 修改hc32f460\board\Kconfig,源代码修改为 ![board_kconfig.png](https://oss-club.rt-thread.org/uploads/20210905/54f3a924f8d995f3dbd8ddbc64fa257c.png.webp) hc32f460\board\Sconscript不做修改 hc32f460\drivers目录下保留 drv_gpio.c、drv_gpio.h、drv_irq.c、drv_irq.h、drv_usart.c、drv_usart.h、SConscript `hc32f460\drivers`目录下 drv_gpio.c 修改为 ![drv_gpio.png](https://oss-club.rt-thread.org/uploads/20210905/575d072c3989ff55594b9aa7f91e7077.png.webp) `hc32f460\drivers`目录下 drv_gpio.h 修改为 ![drv_gpioh.png](https://oss-club.rt-thread.org/uploads/20210905/1acd90d269399133b2a454c13a37583d.png.webp) hc32f460\drivers目录下 drv_irq.c 修改为 ![drv_irqc.png](https://oss-club.rt-thread.org/uploads/20210905/10adf63c2d60481fcb0a58dea7333f30.png) hc32f460\drivers目录下 drv_irq.h 修改为 ![drv_irq.png](https://oss-club.rt-thread.org/uploads/20210905/edca1550e779c14e968ef68a01c27a77.png) `hc32f460\drivers`目录下 drv_usart.c 修改为 ![drv_usart.png](https://oss-club.rt-thread.org/uploads/20210905/4b7f925a63b9a54fada6d938aa7c1ad7.png.webp) `hc32f460\drivers`目录下 drv_usart.h 修改为 ![drv_usarth.png](https://oss-club.rt-thread.org/uploads/20210905/0e45c477304523c2d28393589dcfd070.png) `hc32f460\drivers`目录下 SConscript 修改为 ![drv_sconscript.png](https://oss-club.rt-thread.org/uploads/20210905/a644747ad61c3ea312d75edafb47865e.png) 删除`hc32f460\figures`文件夹 ![删除figur.png](https://oss-club.rt-thread.org/uploads/20210822/0c821ee523f1955c6853664cb86d35d8.png) `hc32f460\Libraries\CMSIS\Device\HDSC`目录下文件夹修改为 HC32F460 ![修改hdsc下文件夹名.png](https://oss-club.rt-thread.org/uploads/20210823/be64074f99b97a592c87e10e55b12b1a.png) `hc32f460\Libraries\CMSIS\Device\HDSC\HC32F460\Include`删除ddl_config.h、hc32_common.h、hc32_ddl.h、hc32f4a0.h、system_hc32f4a0.h, ![删除hc32f460include.png](https://oss-club.rt-thread.org/uploads/20210823/6f886215dd38844c13b15f02656715b7.png) 替换为HC32F460系列文件 ![9e6667e05f346f7bd50542e06104d55c.png](https://oss-club.rt-thread.org/uploads/20210823/9e6667e05f346f7bd50542e06104d55c.png) `hc32f460\Libraries\CMSIS\Device\HDSC\HC32F460\Source`目录下删除system_hc32f4a0.c ![hc32f460下删除source.png](https://oss-club.rt-thread.org/uploads/20210823/43c04d9b05e6b0cff9f5b7d13d219c17.png) `hc32f460\Libraries\CMSIS\Device\HDSC\HC32F460\Source\ARM`目录下替换为 ![arm目录下替换.png](https://oss-club.rt-thread.org/uploads/20210824/477e05bd22e982bebbaab904aa3350ca.png) `hc32f460\Libraries\CMSIS\Device\HDSC\HC32F460\Source\GCC`目录下替换为 ![gcc目录下替换.png](https://oss-club.rt-thread.org/uploads/20210824/9f0b8f3e49d5cdd992c591b3da769e0e.png) `hc32f460\Libraries\CMSIS\Device\HDSC\HC32F460\Source`替换为system_hc32f460.c ![hc32f460source目录下替换.png](https://oss-club.rt-thread.org/uploads/20210823/efd37b9cc68ca9b5990c209975a8867f.png) `hc32f460\Libraries`目录下HC32F4A0_StdPeriph_Driver替换为HC32F460_StdPeriph_Driver ![替换library内容.png](https://oss-club.rt-thread.org/uploads/20210823/a5aa4712207b1a424c9df1deca237e10.png) `hc32f460\Libraries\HC32F460_StdPeriph_Driver`目录下替换为HC32F460标准驱动程序 ![stdperiph目录下.png](https://oss-club.rt-thread.org/uploads/20210823/18de4125c192a980790abc678b95df64.png) `hc32f460\Libraries\SConscript`修改为以下内容 ![librarysconstrip.png](https://oss-club.rt-thread.org/uploads/20210905/6ae6d7a94a75e25b3fb42c1ffd787caa.png) 修改\hc32f460目录下 rtconfig.py 里面HC32F4A0全部替换为HC32F460 修改`\hc32f460`目录下 SConstruct.py 里面hc32f4a0全部替换为hc32f460 测试Kconfig是否修改成功。在\hc32f460目录下右键 ![conemu.png](https://oss-club.rt-thread.org/uploads/20210822/86dacb365065e7667a065e661657fc21.png.webp) 输入命令 menuconfig 结束后保存配置文件 ![测试menuconfig.gif](https://oss-club.rt-thread.org/uploads/20210905/c18173ce964073e40c7ac7907d586700.gif) 控制台使用usart4 需要修改可在 RT-thread Kernel-->Kernel Device Object-->the device name for console ![修改console串口.gif](https://oss-club.rt-thread.org/uploads/20210905/3fd2c278db7fb01565e564734365bbab.gif) 修改模板工程 ![修改模板工程.png](https://oss-club.rt-thread.org/uploads/20210905/ce17ec846ca3c537bfca18c9cc0ba41e.png.webp) 换芯片`Options for Target -> Device` ![选择芯片.png](https://oss-club.rt-thread.org/uploads/20210824/46d31a5141d7891dd836ab7893d2c0f8.png.webp) 选择仿真器 Options for Target ->Debug->J-LINK ![选择jlink.png](https://oss-club.rt-thread.org/uploads/20210824/e01feb24c5d167bf763353356071996e.png.webp) 修改芯片容量`Options for Target->Utilities->Settings` ![选择芯片大小.png](https://oss-club.rt-thread.org/uploads/20210824/b814ea68e6d4c42f27bd2338d2b7a5df.png.webp) 新建工程 ![编译过程.gif](https://oss-club.rt-thread.org/uploads/20210905/8f2c1599f32b05aeb0254336f71f59e4.gif) ##验证工程 打开新建工程,编译下载 ![打开工程.png](https://oss-club.rt-thread.org/uploads/20210905/3ab04b3b5fdf59453147baeb3ef34bb7.png) 运行结果 ![动画.gif](https://oss-club.rt-thread.org/uploads/20210905/495009e134a8a756973fde55d9ebbe1b.gif) #经验总结 从8月20日确定接手,21日开搞到9月2日移植完成,期间走了小弯路,收益颇多。总结有一下几点: 1. 之前从来都是拿来主义从没考虑过东西怎么来的,rtt实话只能说会用离精通还差老远并没有深入了解函数来龙去脉调用过程,此次移植稍微了解一下结构,我想说的是rtt架构师真是天人,叹为观止,程序架构设计精妙,大牛编程技巧真绝,今后编程过程中借鉴使用。 2. 之前只是知道python可以用于人工智能、大数据处理等,平时都是使用py+qt编写一些小程序使用,此次移植过程中终于见识py批量处理文件的强大。 3. 天外有天,人外有人。学海无涯。 4. 吐槽一下hc函数库定义乱乱的,两个系列芯片函数居然不通用,移植过程中检查库函数功能太痛苦了。期间发现个rtt-master另一个系列中有严重bug,抽时间提交个PR。
8
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
想当诸侯的小蚂蚁
这家伙很懒,什么也没写!
文章
7
回答
5
被采纳
0
关注TA
发私信
相关文章
1
rt thread 2.0.2 usart 接收缓存问题
2
关于STM32串口通信的问题
3
STM32F1+RTT串口接收终端数据丢失问题
4
UART TX丢数据?
5
RTT打开串口的时候如何自定义波特率呢?
6
STM32F4的USART数据接收问题
7
串口1234使用问题
8
串口接收回调函数
9
LPC18xx UART问题讨论
10
x1000串口配置的失败问题
推荐文章
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
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部