> 文档中心 > 【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)


一、开发环境

桌面操作系统: Win10
开发软件: Keil MDKV5.36
RTOS平台: rt-thread 4.1.0
项目地址:https://gitee.com/lsslny/rt-thread/tree/gitee_master/bsp/gd32

二、任务计划

1、rt-thread 系统移植;(完成评测任务)
2、AT组件加4G或WiFi模组使用;
3、MQTT组件使用;
4、SENSOR设备驱动加DHT11温湿度传感器信息采集;

三、移植过程

1、先从rt-thread官方库,把代码Fork到自己的库,然后拉取到本地;

https://gitee.com/rtthread

先Fork:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

再拉取:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9YZHbBj-1649309691645)(/img/bVbtTV)]

2、进入rt-thread的BSP目录(rt-thread\bsp\gd32):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8nniu71-1649309691645)(/img/bVbtTW)]

将gd32305r-start复制然后粘贴,并且将其改名为:gd32310k-start

使用这份的原因是,同为F3系列的,同样都是Cortex-m4核,搞起来更容易些;

3、解压 GD32F3x0_Firmware_Library_V2.2.0.rar 并且将Firmware文件夹放到rt-thread\bsp\gd32\libraries下

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

然后将Firmware改名为GD32F3x0_Firmware_Library:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cyHOAk0G-1649309691646)(/img/bVbtTZ)]

然后将附近的GD32F30x_Firmware_Library文件夹下SConscript文件拷贝到本目录下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Mm0r2c4-1649309691647)(/img/bVbtT0)]

4、将刚才两步所添加的所有文件先add和commit一下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7H7Rp5t6-1649309691648)(/img/bVbtT1)]

这样子的话,后续改动如果有问题可直接恢复,提高效率;

5、默认工程文件更改

5.1、解压GD32F3x0_Demo_Suites_V2.2.0.rar,运行GigaDevice.GD32F3x0_DFP.3.0.0.pack将MDK需要的库添加进软件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLb8ahXq-1649309691648)(/img/bVbtT2)]

5.2、打开template.uvprojx更改默认工程文件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPbpQ7cZ-1649309691649)(/img/bVbtT3)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdrW6ayL-1649309691649)(/img/bVbtT4)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fuJvkI5-1649309691650)(/img/bVbtT5)]

然后保存并且退出软件;

5.3、打开GD32310K_START_Demo_Suites\Projects\01_GPIO_Running_LED例程,将gd32f3x0_libopt.h文件复制到rt-thread\bsp\gd32\gd32310k-start\board目录下,并且将其下的gd32f30x_libopt.h文件删除,然后将gd32f3x0_libopt.h文件add到git中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ye35FZZl-1649309691650)(/img/bVbtT6)]

6、构建文件更改

6.1、打开gd32\gd32310k-start\SConstruct文件做如下修改:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

将gd32_library改成GD32F3x0的固件库GD32F3x0_Firmware_Library;

6.2、打开rt-thread\bsp\gd32\gd32310k-start\board\SConscript文件做如下更改:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

更改后如下:

if rtconfig.CROSS_TOOL == 'gcc':    src += [startup_path_prefix + '/GD32F3x0_Firmware_Library/CMSIS/GD/GD32F3x0/Source/GCC/startup_gd32f3x0.s']elif rtconfig.CROSS_TOOL == 'keil':    src += [startup_path_prefix + '/GD32F3x0_Firmware_Library/CMSIS/GD/GD32F3x0/Source/ARM/startup_gd32f3x0.s']elif rtconfig.CROSS_TOOL == 'iar':    src += [startup_path_prefix + '/GD32F3x0_Firmware_Library/CMSIS/GD/GD32F3x0/Source/IAR/startup_gd32f3x0.s']    CPPDEFINES = ['GD32F310']

6.3、打开rt-thread\bsp\gd32\libraries\GD32F3x0_Firmware_Library\SConscript改成以下内容:

import rtconfigfrom building import *# get current directorycwd = GetCurrentDir()# The set of source files associated with this SConscript file.src = Glob('GD32F3x0_standard_peripheral/Source/*.c')src += [cwd + '/CMSIS/GD/GD32F3x0/Source/system_gd32f3x0.c']path = [    cwd + '/CMSIS/GD/GD32F3x0/Include',    cwd + '/CMSIS',    cwd + '/GD32F3x0_standard_peripheral/Include',]if GetDepend(['RT_USING_BSP_USB']):    path += [cwd + '/GD32F3x0_usbfs_library/driver/Include']    src  += [cwd + '/GD32F3x0_usbfs_library/driver/Source']CPPDEFINES = ['USE_STDPERIPH_DRIVER']group = DefineGroup('Libraries', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES)Return('group')

7、kconfig文件更改:

7.1、主目录下的kconfig不用管它,我们直接更改rt-thread\bsp\gd32\gd32310k-start\board目录下的kconfig

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1uePaTJJ-1649309691654)(/img/bVbtT9)]

然后将多余的串口删掉(GD32F310K8芯片只有两个串口)

8、board文件夹下链接脚本更改

从GD32F310xx_Datasheet_Rev1.0.pdf文档里面可以看到:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FS39waex-1649309691656)(/img/bVbtUa)]

我们这颗GD32F310K8T6芯片,有FLASH 64K(0x10000)和SRAM 8K(0x2000);

8.1、打开rt-thread\bsp\gd32\gd32310k-start\board\linker_scripts目录下link.icf文件:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;define symbol __ICFEDIT_region_ROM_end__   = 0x0800FFFF;define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;define symbol __ICFEDIT_region_RAM_end__   = 0x20007FFF;

8.2、打开rt-thread\bsp\gd32\gd32310k-start\board\linker_scripts目录下link.ld文件:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

8.3、打开rt-thread\bsp\gd32\gd32310k-start\board\linker_scripts目录下link.icf文件:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

LR_IROM1 0x08000000 0x00010000  {    ; load region size_region  ER_IROM1 0x08000000 0x00010000  {  ; load address = execution address   *.o (RESET, +First)   *(InRoot$$Sections)   .ANY (+RO)  }  RW_IRAM1 0x20000000 0x00002000  {  ; RW data   .ANY (+RW +ZI)  }}

8.4、打开rt-thread\bsp\gd32\gd32310k-start\board目录下board.h文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fcfvtkkz-1649309691660)(/img/bVbtUe)]

9、更改main.c文件

因为我们板子用的是PA8点灯,所以将点灯的IO口改成PA8就好了;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9IG3SiIa-1649309691661)(/img/bVbtUf)]

至此,我们gd32310k-start项目目测的部分已经改完了,现在需要使用scon工具进行配置了;

10、打开scon工具,输入menuconfig命令,进入配置页面;

将控制的输出口改成uart0(根据自己的需求,也可以不改,当是改了的话,对应硬件驱动也要改过来)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SfjHev4x-1649309691661)(/img/bVbtUg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2revYWg-1649309691662)(/img/bVbtUh)]

由于我们这颗芯片SRAM太小,我们需要关闭一些用不到的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUeDnJc8-1649309691662)(/img/bVbtUi)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raH0WTDI-1649309691663)(/img/bVbtUj)]

这里关闭workqueue,占用空间大,容易导致运行挂了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAjWUPVX-1649309691663)(/img/bVbtUk)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZlvH81I-1649309691664)(/img/bVbtUl)]

配置完之后,保存退出;

执行命令: scons --target=mdk5 生成mdk5工程文件

11、解决驱动的BUG,目前这里仅出来drv_gpio和drv_uart两个

11.1、打开生成的mdk5文件,编译。。。

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

发现drv_gpio.c报错

打开drv_gpio.h发现,没有包含gd32f31x_gpio.h的头文件

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

那么,包含一下:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

编译,继续报错,而且还是刚才的错误。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iVWkwvm-1649309691666)(/img/bVbtUq)]

那么,查找下GPIO_PORT_SOURCE_GPIOA,真没有,那就查找下EXTI_SOURCE_GPIOA,

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

有了,那就好办了,说明只要选择上面一部分就好了,不要下面部分。代码处理如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgpm2r12-1649309691667)(/img/bVbtUt)]

继续编译,发现中断编译不通过。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWcXCC3L-1649309691667)(/img/bVbtUu)]

这个就简单了,一般跑去看下gd32f3x0.h头文件就好了。那就打开gd32f3x0.h。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnGsgL2F-1649309691669)(/img/bVbtUw)]

然后将代码修改一下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DMtBveu-1649309691670)(/img/bVbtUy)]

继续编译。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akxTUwly-1649309691672)(/img/bVbtUA)]

从头文件drv_gpio.h来看,它应该是跟GD32F4xx一个样的

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

那么。。。凡是遇到SOC_SERIES_GD32F4xx改成defined (SOC_SERIES_GD32F4xx) || defined (SOC_SERIES_GD32F3x0)即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLjgxGD6-1649309691674)(/img/bVbtUE)]

继续编译,嗯???

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wA7qRVrU-1649309691675)(/img/bVbtUH)]

找到rcu_periph_clock_enable这个函数,发现并没有RCU_SYSCFG这个,那么用RCU_CFGCMP(系统配置和比较器)吧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jUnxpEp-1649309691676)(/img/bVbtUI)]

修改如下:

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

继续编译。。。drv_gpio.c无报错,说明这个文件的BUG已经解决完毕;

11.2、接下来解决drv_uart.c的BUG,编译有如下错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9G5mJUsb-1649309691677)(/img/bVbtUK)]

发现有 SOC_SERIES_GD32F4xx这个,,,那就好办了,在本文件和drv_uart.h中发现它就统统改成(SOC_SERIES_GD32F4xx) || defined (SOC_SERIES_GD32F3x0),然后继续编译。。。

【GD32F310开发板试用】rtthread移植及BSP制作(保姆级)

好激动,无警告,无错误。。。结束了吧???且慢,查看GD32F3x0_shiyongzhinan_Rev1.2.pdf手册发现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AGOivEsz-1649309691678)(/img/bVbtUM)]

那么。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNRdgFzw-1649309691678)(/img/bVbtUN)]

这里需要改成GPIO_AF_1 。
下载程序。。。复位重启。。。漂亮。。。
至此,移植rtthread操作系统完毕;
最后来一张运行图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrCN70tW-1649309691678)(/img/bVbtUP)]

咦?发现剩余空间不是很多了。。。