一、开发环境
桌面操作系统: 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到自己的库,然后拉取到本地;
先Fork:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IhWyh2nA-1649309691643)(/img/bVbtTU)]](https://i-blog.csdnimg.cn/blog_migrate/65b75bf72dcd250042051666fb6adaf0.png)
再拉取:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M9YZHbBj-1649309691645)(/img/bVbtTV)]](https://i-blog.csdnimg.cn/blog_migrate/1515f96418f870ad13b0452ad29bbd70.png)
2、进入rt-thread的BSP目录(rt-thread\bsp\gd32):
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q8nniu71-1649309691645)(/img/bVbtTW)]](https://i-blog.csdnimg.cn/blog_migrate/9b8d2eaa92df5080fcbb1d75ff083ca6.png)
将gd32305r-start复制然后粘贴,并且将其改名为:gd32310k-start
使用这份的原因是,同为F3系列的,同样都是Cortex-m4核,搞起来更容易些;
3、解压 GD32F3x0_Firmware_Library_V2.2.0.rar 并且将Firmware文件夹放到rt-thread\bsp\gd32\libraries下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ov6MoD8B-1649309691646)(/img/bVbtTX)]](https://i-blog.csdnimg.cn/blog_migrate/a9c1edd768a44f67c5310e28476e804a.png)
然后将Firmware改名为GD32F3x0_Firmware_Library:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cyHOAk0G-1649309691646)(/img/bVbtTZ)]](https://i-blog.csdnimg.cn/blog_migrate/6d853b72a1d307cd7b168cb242535c5f.png)
然后将附近的GD32F30x_Firmware_Library文件夹下SConscript文件拷贝到本目录下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Mm0r2c4-1649309691647)(/img/bVbtT0)]](https://i-blog.csdnimg.cn/blog_migrate/703f2aaf79cea226a7a001272bbd162a.png)
4、将刚才两步所添加的所有文件先add和commit一下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7H7Rp5t6-1649309691648)(/img/bVbtT1)]](https://i-blog.csdnimg.cn/blog_migrate/bdc1ffd3785c670cf02de91461dff71e.png)
这样子的话,后续改动如果有问题可直接恢复,提高效率;
5、默认工程文件更改
5.1、解压GD32F3x0_Demo_Suites_V2.2.0.rar,运行GigaDevice.GD32F3x0_DFP.3.0.0.pack将MDK需要的库添加进软件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLb8ahXq-1649309691648)(/img/bVbtT2)]](https://i-blog.csdnimg.cn/blog_migrate/da58aa27d9d66529f8b782eb8a85dae3.png)
5.2、打开template.uvprojx更改默认工程文件;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPbpQ7cZ-1649309691649)(/img/bVbtT3)]](https://i-blog.csdnimg.cn/blog_migrate/2d5737a74ee00d0faf9e7042f562f3f2.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdrW6ayL-1649309691649)(/img/bVbtT4)]](https://i-blog.csdnimg.cn/blog_migrate/8553fdc70174cca945d23918f2c0d05a.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fuJvkI5-1649309691650)(/img/bVbtT5)]](https://i-blog.csdnimg.cn/blog_migrate/9d929d08085571dbea03f578e2584d47.png)
然后保存并且退出软件;
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)]](https://i-blog.csdnimg.cn/blog_migrate/f5d45a78256872840ceb0051c882d57a.png)
6、构建文件更改
6.1、打开gd32\gd32310k-start\SConstruct文件做如下修改:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Smjm4ttg-1649309691651)(/img/bVbtT7)]](https://i-blog.csdnimg.cn/blog_migrate/cb8540ea6715ece22e7236ddba512f8c.png)
将gd32_library改成GD32F3x0的固件库GD32F3x0_Firmware_Library;
6.2、打开rt-thread\bsp\gd32\gd32310k-start\board\SConscript文件做如下更改:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Og7Vbrr-1649309691652)(/img/bVbtT8)]](https://i-blog.csdnimg.cn/blog_migrate/51403c7b2671bbc05d0a0e27af05474b.png)
更改后如下:
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 rtconfig
from building import *
# get current directory
cwd = 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)]](https://i-blog.csdnimg.cn/blog_migrate/e304aab841d494427255c684c4b8a67f.png)
然后将多余的串口删掉(GD32F310K8芯片只有两个串口)
8、board文件夹下链接脚本更改
从GD32F310xx_Datasheet_Rev1.0.pdf文档里面可以看到:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FS39waex-1649309691656)(/img/bVbtUa)]](https://i-blog.csdnimg.cn/blog_migrate/1b1e74fe16c9899683018c7e84ec8897.png)
我们这颗GD32F310K8T6芯片,有FLASH 64K(0x10000)和SRAM 8K(0x2000);
8.1、打开rt-thread\bsp\gd32\gd32310k-start\board\linker_scripts目录下link.icf文件:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wDrEInZW-1649309691657)(/img/bVbtUb)]](https://i-blog.csdnimg.cn/blog_migrate/b503ee0fd62d4a29a661e7d06768b9f2.png)
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文件:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O90EMhzM-1649309691658)(/img/bVbtUc)]](https://i-blog.csdnimg.cn/blog_migrate/1dec0ad9be9469d5a99d7f5f5b4a6d0a.png)
8.3、打开rt-thread\bsp\gd32\gd32310k-start\board\linker_scripts目录下link.icf文件:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mf3Z84sk-1649309691659)(/img/bVbtUd)]](https://i-blog.csdnimg.cn/blog_migrate/262129658dcce4a516ea2728b460ce9a.png)
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)]](https://i-blog.csdnimg.cn/blog_migrate/4504b8164f144b43ff7ec8725c3bb7d2.png)
9、更改main.c文件
因为我们板子用的是PA8点灯,所以将点灯的IO口改成PA8就好了;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9IG3SiIa-1649309691661)(/img/bVbtUf)]](https://i-blog.csdnimg.cn/blog_migrate/78c2d5c8189e69ccbcc1b3243b0c4ad5.png)
至此,我们gd32310k-start项目目测的部分已经改完了,现在需要使用scon工具进行配置了;
10、打开scon工具,输入menuconfig命令,进入配置页面;
将控制的输出口改成uart0(根据自己的需求,也可以不改,当是改了的话,对应硬件驱动也要改过来)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SfjHev4x-1649309691661)(/img/bVbtUg)]](https://i-blog.csdnimg.cn/blog_migrate/bfc16d5302def0deff94a7fe72479fec.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2revYWg-1649309691662)(/img/bVbtUh)]](https://i-blog.csdnimg.cn/blog_migrate/ad36e33a82b12a288f9428685954fd99.png)
由于我们这颗芯片SRAM太小,我们需要关闭一些用不到的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUeDnJc8-1649309691662)(/img/bVbtUi)]](https://i-blog.csdnimg.cn/blog_migrate/3172ba8bbca1e3985b446e063dac467d.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-raH0WTDI-1649309691663)(/img/bVbtUj)]](https://i-blog.csdnimg.cn/blog_migrate/8511ad07be92d13ba105a5f1064420a1.png)
这里关闭workqueue,占用空间大,容易导致运行挂了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAjWUPVX-1649309691663)(/img/bVbtUk)]](https://i-blog.csdnimg.cn/blog_migrate/a70921a3eae94a34aba57d54e84216eb.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IZlvH81I-1649309691664)(/img/bVbtUl)]](https://i-blog.csdnimg.cn/blog_migrate/e61dce1d63bbfbac39561e3deb66be1c.png)
配置完之后,保存退出;
执行命令: scons --target=mdk5 生成mdk5工程文件
11、解决驱动的BUG,目前这里仅出来drv_gpio和drv_uart两个
11.1、打开生成的mdk5文件,编译。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uqwPjQau-1649309691664)(/img/bVbtUm)]](https://i-blog.csdnimg.cn/blog_migrate/db7b6db20a55f2242ad815daa99cd2c9.png)
发现drv_gpio.c报错
打开drv_gpio.h发现,没有包含gd32f31x_gpio.h的头文件
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mReS7W9G-1649309691665)(/img/bVbtUn)]](https://i-blog.csdnimg.cn/blog_migrate/37b140d84dafb48dabce0fadf4a68da3.png)
那么,包含一下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tB304Z18-1649309691665)(/img/bVbtUo)]](https://i-blog.csdnimg.cn/blog_migrate/2da33379cf123f3d2162b48a557b7caa.png)
编译,继续报错,而且还是刚才的错误。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iVWkwvm-1649309691666)(/img/bVbtUq)]](https://i-blog.csdnimg.cn/blog_migrate/aee39055082c2e74ed94325e8ff62bbb.png)
那么,查找下GPIO_PORT_SOURCE_GPIOA,真没有,那就查找下EXTI_SOURCE_GPIOA,
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GbZ4YTMy-1649309691666)(/img/bVbtUs)]](https://i-blog.csdnimg.cn/blog_migrate/a0d25abfd9d0469bbb4a92f0b42435dc.png)
有了,那就好办了,说明只要选择上面一部分就好了,不要下面部分。代码处理如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgpm2r12-1649309691667)(/img/bVbtUt)]](https://i-blog.csdnimg.cn/blog_migrate/31bfac23025a915d8a30e8d6c1e68dc5.png)
继续编译,发现中断编译不通过。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWcXCC3L-1649309691667)(/img/bVbtUu)]](https://i-blog.csdnimg.cn/blog_migrate/fcb6c3d399adaf134e1ea5a3545bf8c6.png)
这个就简单了,一般跑去看下gd32f3x0.h头文件就好了。那就打开gd32f3x0.h。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OnGsgL2F-1649309691669)(/img/bVbtUw)]](https://i-blog.csdnimg.cn/blog_migrate/6da1781f7fdae3cc0a590cb29a963edd.png)
然后将代码修改一下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DMtBveu-1649309691670)(/img/bVbtUy)]](https://i-blog.csdnimg.cn/blog_migrate/d907cc0562431385cb5db5d83eaf3792.png)
继续编译。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-akxTUwly-1649309691672)(/img/bVbtUA)]](https://i-blog.csdnimg.cn/blog_migrate/97aef42c0edd1bbf94d19e4a2546283f.png)
从头文件drv_gpio.h来看,它应该是跟GD32F4xx一个样的
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1EgCPFU-1649309691674)(/img/bVbtUC)]](https://i-blog.csdnimg.cn/blog_migrate/08075acccf2746d54f5898361b501339.png)
那么。。。凡是遇到SOC_SERIES_GD32F4xx改成defined (SOC_SERIES_GD32F4xx) || defined (SOC_SERIES_GD32F3x0)即可
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLjgxGD6-1649309691674)(/img/bVbtUE)]](https://i-blog.csdnimg.cn/blog_migrate/1c97bd18df229ee7d7856fbc0f218c22.png)
继续编译,嗯???
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wA7qRVrU-1649309691675)(/img/bVbtUH)]](https://i-blog.csdnimg.cn/blog_migrate/b2fb6a56c65a79e35b3f433d973b2aa3.png)
找到rcu_periph_clock_enable这个函数,发现并没有RCU_SYSCFG这个,那么用RCU_CFGCMP(系统配置和比较器)吧
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6jUnxpEp-1649309691676)(/img/bVbtUI)]](https://i-blog.csdnimg.cn/blog_migrate/d4615396c6829efd0e9b36cd028c272d.png)
修改如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6o9oU2SB-1649309691676)(/img/bVbtUJ)]](https://i-blog.csdnimg.cn/blog_migrate/ab1235663aa2887c3de12b040cb49587.png)
继续编译。。。drv_gpio.c无报错,说明这个文件的BUG已经解决完毕;
11.2、接下来解决drv_uart.c的BUG,编译有如下错误:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9G5mJUsb-1649309691677)(/img/bVbtUK)]](https://i-blog.csdnimg.cn/blog_migrate/aa1e815641a4cdda1457628eb97f0cc1.png)
发现有 SOC_SERIES_GD32F4xx这个,,,那就好办了,在本文件和drv_uart.h中发现它就统统改成(SOC_SERIES_GD32F4xx) || defined (SOC_SERIES_GD32F3x0),然后继续编译。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swVWNl4V-1649309691678)(/img/bVbtUL)]](https://i-blog.csdnimg.cn/blog_migrate/10f3c72027369c89b89376dd080bdde7.png)
好激动,无警告,无错误。。。结束了吧???且慢,查看GD32F3x0_shiyongzhinan_Rev1.2.pdf手册发现
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AGOivEsz-1649309691678)(/img/bVbtUM)]](https://i-blog.csdnimg.cn/blog_migrate/ec27bd55fd8edad99e90fddeaee2033e.png)
那么。。。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kNRdgFzw-1649309691678)(/img/bVbtUN)]](https://i-blog.csdnimg.cn/blog_migrate/1e50ed003ae67b4d6f2fc38c672e6a35.png)
这里需要改成GPIO_AF_1 。
下载程序。。。复位重启。。。漂亮。。。
至此,移植rtthread操作系统完毕;
最后来一张运行图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrCN70tW-1649309691678)(/img/bVbtUP)]](https://i-blog.csdnimg.cn/blog_migrate/3990c0647f1554be0a7b6639ed8e9170.png)
咦?发现剩余空间不是很多了。。。
498

被折叠的 条评论
为什么被折叠?



