之前的帖子
【GD32F427开发板试用】1. 串口实现scanf输入控制LED
前言
一个嵌入式系统对于单片机开发可以事半功倍,目前常用的嵌入式系统有FreeRTOS以及RT-Thread,RT-Thread是国内的开元嵌入式操作系统,使用起来很方便,还支持Shell,本次将RT-Thread移植到GD32F427上。
本文主要实现如下功能:
- 基于RT-Thread 现在gd32407v-start的BSP更新为GD32F427V-Start的BSP,在MDK上完成RT-Thread标准版适配;
- 修改FINSH默认串口配置;
- 使用RT-Thread Stdio开发GD32F427V-start。
BSP移植源码以及资料下载:
源码可以直接在Gitee上下载,国内访问很快。
https://gitee.com/rtthread/rt-thread
当然也可以使用Github:https://github.com/RT-Thread/rt-thread
BSP制作过程中需要用到ENV工具。
EVN工具下载地址:https://www.rt-thread.org/download.html
ENV工具使用教程
ENV工具教程:https://www.rt-thread.org/document/site/#/development-tools/env/env?id=env-%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
RT-Thread官方基于gd32f407v-start有较为详细的移植教程。
移植教程:https://gitee.com/rtthread/rt-thread/blob/gitee_master/bsp/gd32/arm/docs/GD32_ARM%E7%B3%BB%E5%88%97BSP%E5%88%B6%E4%BD%9C%E6%95%99%E7%A8%8B.md
移植工作
BSP
参考官方gd32f407v-start的移植教程,进行移植,因为gd32F407V-start与gd32f427v-start相似度很高,移植起来修改很小。
创建gd32f427v-start工程
进入目录: rt-thread-gitee_master\bsp\gd32\arm,将gd32f407v-start工程拷贝一份,更名为gd32f427v-start。
更新工程配置
如果使用的是MDK5,打开template.uvprojx文件,在MDK5上修改相关配置;
如果使用的是MDK4,打开template.uvproj文件,在MDK4上修改相关配置。
此处注意:必须要打开template.uvprojx/template.uvproj文件,不要打开project.uvprojx/project.uvproj。
- 修改目标设备
如下,选择GD32F427VK - 修改调试器
之后保存退出,即可。
更新库文件
将我们下载的最新的GD32F4xx_Firmware_Library库更新到:xxx/rt-thread-gitee_master\bsp\gd32\arm\libraries
因为RT-Thread官方并不会计时更新库,官方的库不包含对F427V的支持,需要更新到最新的库;
更新下图的内容
修改librariex下的Kconfig文件
修改如下,删除不需要的配置。
config SOC_FAMILY_GD32
bool
config SOC_SERIES_GD32F4
bool
select ARCH_ARM_CORTEX_M4
select SOC_FAMILY_GD32
修改gd32f427v-start/SConstruct文件
本文件主要修改编译后的elf以及map文件名,不该也可以。
我修改为如下:
修改链接文件
连接文件在gd32f427v-start/board/linker_scripts下,链接文件中主要修改RAM预计FLASH的起始,结束地址,通过查看数据手册,GD32F427vk的RAM大小为256KB,FLASH大小为3072KB。
注意:虽然RAM地址为256KB,但是链接文件中只能写196KB的大小,不然heap初始化会进入硬件异常,我也不清楚具体原因,查看了用户手册,发现应该是内部RAM可用范围为196KB的原因,如下图,112+64+16 = 192KB。
GD32F427V的RAM大小为192KB,因为GD32F427VK只能用192KB,所以三个链接文件都不需要进行更新,可以直接使用。
修改board/Sconscript
修改如下:
修改串口引脚
默认串口引脚PA9在GD32F427V-Start上不能使用,所以需要修改为其他的复用串口引脚,在libraries/gd32_drivers/drv_usart.c里面修改,如下图:
配置串口USART0
一下步骤都需要使用到ENV工具,参考教程,在RT-Thread官方下载ENV工具,然后将工具添加到右键菜单栏,在工程目录gd32f427v-start下单击右键,选择ConEmu Here,打开ENV配置工具
然后输入menuconfig打开配置菜单,进行如下配置
- 使能uart0
- rt_kprintf关联到uart0
修改rt_kprintf串口映射关系
之后保存,退出
生成MDK5工程
配置完成之后,输入如下命令编译。
scons
输入如下命令生成MDK5工程
scons --target=MDK5
--target=MDK5/MDK4/IAR可以生成基于KEIL5/KEIL4/IAR的工程
验证RT-Thread是否移植成功
打开project.uvprojx,编译,下载,打开串口调试助手,可以看到如下界面,输入help,查看命令,并且LED2没500ms闪烁一次,表示移植成功。
使用RT-Thread Studio开发
目前已经实现了基于MDK5的开发环境的搭建,但是RT-Thread Studio开发起来更便捷一些,可以直接打开配置界面进行配置,然后编译下载,不需要在单独使用ENV工具进行配置。所以我决定后面都用RT-Thread Studio开发,下面说明过程。
打开ENV工具,使用下面的命令生成工程:
scons --dist
使用该命令后,会在工程目录下的dist目录下生成工程,还有一个是工程的压缩文件。
使用RT-Thread Studio 调试
之后导入工程,编译下载即可,很便捷,可以使用板载的GD-Link下载,也可以使用SWD,用JLINK或者是ST-LINK下载调试。
我试了一下,如果用ST-LINK下载是可以的,但是调试会报错,暂时没找到原因。
可以使用板载的GD-LINK下载,配置方式如下:
- 配置下载方式
- 配置device名称
- 下载信息
可以看到下载的时候有报错信息,但是不用管它,依然可以下载成功,调试也是一样的,可以正常调试,暂时没找到具体报错原因,不影响使用。