Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
BSP
国产MCU移植
【国产MCU移植】移植RT-Thread到国产芯片HK32F030C8
发布于 2021-09-12 16:33:47 浏览:2447
订阅该版
[tocm] ## **一、移植前准备** - [HK32F030数据手册](http://www.hsxp-hk.com/companyfile/3.html) - [HK32F030用户手册](http://www.hsxp-hk.com/companyfile/91.html) - [HKMicroChip.HK32F0xx_DFP](http://www.hsxp-hk.com/companyfile/69.html) - [HK32F0xx外设库](https://bbs.21ic.com/icview-3040622-1-1.html) - [rt-thread源码](https://github.com/RT-Thread/rt-thread) - [rt-thread env工具](https://www.rt-thread.org/page/download.html) - [formatting工具](https://www.github.com/mysterywolf/formatting) ## **二、移植过程** ### 2.1获取源码 移植完成后需要向RTT提交PR,所以拉取源码前先从rtt官方代码库fork到自己的仓库,然后从自己仓库clone到本地。 创建一个新的分支用于添加bsp ### 2.2添加bsp目录 Cortex内核的MCU移植原理都大同小异,比较容易上手的方式就是找一个比较符合目标芯片的bsp作为参考。我选择作为参考的bsp目录是at32,虽然内核不同于at32的Cortex-M4,但是这个bsp的目录结构比较符合我的审美。 ![1b45b3052dd4590a051f9146918767b6.png](https://oss-club.rt-thread.org/uploads/20210912/1b45b3052dd4590a051f9146918767b6.png) 在bsp目录下创建名为hk32的文件夹,下级目录再分别创建hk32f030c8和libraries目录,libraries用于放置通用的外设库和驱动库。 ![rt_drivers.png](https://oss-club.rt-thread.org/uploads/20210912/f840ee00c53e7ad1110708037b93c972.png.webp) hk32f030c8目录下则拷贝at32f403a-start下的所有文件。 ### 2.3修改工程文件 修改keil5的工程模板文件template.uvprojx,主要是选择目标芯片 ![ee3d35847e22a0c61cf91fe92e8dff0f.png](https://oss-club.rt-thread.org/uploads/20210912/ee3d35847e22a0c61cf91fe92e8dff0f.png) 修改根目录下SConstruct文件,主要是与外设库和驱动库目录有关,使用相对地址即可 ```python SDK_ROOT = os.path.abspath('./') if os.path.exists(SDK_ROOT + '/libraries'): libraries_path_prefix = SDK_ROOT + '/libraries' else: libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' SDK_LIB = libraries_path_prefix Export('SDK_LIB') # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) hk32f0_library = 'HK32F0xx_StdPeriph_Driver' rtconfig.BSP_LIBRARY_TYPE = hk32f0_library # include libraries objs.extend(SConscript(os.path.join(libraries_path_prefix, hk32f0_library, 'SConscript'))) # common include drivers objs.extend(SConscript(os.path.join(libraries_path_prefix, 'rt_drivers', 'SConscript'))) # make a building DoBuilding(TARGET, objs) ``` 修改board目录下Kconfig、SConscript文件,为了方便使用env工具,相关的菜单脚本和构建脚本文件也要修改 芯片型号及其家族 ``` config SOC_HK32F030C8T6 bool select SOC_SERIES_HK32F0XX select RT_USING_COMPONENTS_INIT select RT_USING_USER_MAIN default y ``` 启动文件等 ```python # add general drivers src = Split(''' board.c msp/hk32_msp.c ''') path = [cwd] path += [cwd + '/msp'] startup_path_prefix = SDK_LIB src += [startup_path_prefix + '/HK32F0xx_StdPeriph_Driver/CMSIS/HK32F0xx/Source/system_hk32f0xx.c'] if rtconfig.CROSS_TOOL == 'gcc': src += [startup_path_prefix + '/HK32F0xx_StdPeriph_Driver/CMSIS/HK32F0xx/Source/gcc/startup_hk32f030x4x6x8.s'] elif rtconfig.CROSS_TOOL == 'keil': src += [startup_path_prefix + '/HK32F0xx_StdPeriph_Driver/CMSIS/HK32F0xx/Source/ARM/startup_hk32f030x4x6x8.s'] elif rtconfig.CROSS_TOOL == 'iar': src += [startup_path_prefix + '/HK32F0xx_StdPeriph_Driver/CMSIS/HK32F0xx/Source/iar/startup_hk32f030x4x6x8.s'] CPPDEFINES = ['HK32F030x8'] ``` 外设库下的SConscript文件 ```python src = Split(""" src/hk32f0xx_adc.c src/hk32f0xx_crc.c src/hk32f0xx_dbgmcu.c src/hk32f0xx_divsqrt.c src/hk32f0xx_dma.c src/hk32f0xx_exti.c src/hk32f0xx_flash.c src/hk32f0xx_gpio.c src/hk32f0xx_i2c.c src/hk32f0xx_iwdg.c src/hk32f0xx_misc.c src/hk32f0xx_pwr.c src/hk32f0xx_rcc.c src/hk32f0xx_rtc.c src/hk32f0xx_spi.c src/hk32f0xx_syscfg.c src/hk32f0xx_tim.c src/hk32f0xx_usart.c src/hk32f0xx_wwdg.c """) path = [ cwd + '/CMSIS/HK32F0xx/Include', cwd + '/CMSIS/Core', cwd + '/inc',] CPPDEFINES = ['USE_STDPERIPH_DRIVER'] group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) ``` ### 2.4添加驱动 drv_gpio.c和drv_usart.c,主要是实现向pin、serial设备框架的注册以及底层调用接口的实现。因为外设库语法几乎一致,所以不需要花太多精力。 ### 2.5向RT-Thread提交PR 参考[向 RT-Thread 贡献代码](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github) 检查代码,需要遵循[RT-Thread 编程风格](https://github.com/RT-Thread/rt-thread/blob/master/documentation/coding_style_cn.md) 芯片厂商提供的开源代码需要在bsp目录下添加`.ignore_format.yml`跳过库文件的ci检查,并在[bsp/Copyright_Notice.md](https://github.com/RT-Thread/rt-thread/blob/master/bsp/Copyright_Notice.md)中添加版权声明 完善bsp目录下的readme文档,将代码push到自己的github上,提交PR。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
JonasWen
这家伙不懒,但是什么也不想写!
文章
2
回答
167
被采纳
38
关注TA
发私信
相关文章
1
STM32 407 串口接收数据 系统卡死
2
RTT nrf24l01 设备驱动程序
3
stm32f10x串口只能发送数据,无法接收
4
第一次尝试移植rt-thread 到stm32F103系列问题
5
有人把stm32L07xx的bsp移到rtt上来了吗?求一个
6
rt-thread线程调度异常在stm32f103芯片上
7
RTT是否支持STM32F429
8
请问谁有 STM32F40x HAL + RT-THREAD 模板
9
rt-thread在stm32f411下的移植问题
10
针对STM32F7系列平台的MPU,Cache特性,需要注意哪些问题?
推荐文章
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
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部