1.环境搭建
首先大概介绍一下这款GD32F427V-START开发板。
主控芯片GD32F427V,引脚应该是兼容STM32F42X系列的,不过板上这颗GD32F427VKT6的flash空间比较大,达到了3MB,ST的最多只有2MB,然后主频也比ST的高一点。
其他外设差不多。笔者以前用GD的芯片,一般喜欢选跟ST软件兼容的,然后直接用ST的环境。不过GD现在有一些新的型号,跟ST的不兼容,考虑到未来有可能会用到这类型号,因此借着这次试用的机会,也体验一下GD的库。
此处使用的开发工具为keil5,所有开发工具
datasheet和寄存器手册
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKuAcu_aAABWCTNEKo0697.jpg)
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqANQOuAAA6C-QybiA620.jpg)
开发板原理图和一些示例程序
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAcvGiAACU7jnbuKI757.jpg)
keil的pack,下载之后解压安装即可
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqATZZHAACv0tNY53I936.jpg)
固件库
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqATt3oAACV_VFHUc0710.jpg)
下面基于固件库生成一个可以运行的demo,后续在这个demo基础上进行freertos的移植以及相关功能的开发
固件库解压之后内容如下图
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqACfFQAACsGYaKFgY297.jpg)
新建一个文件夹,比如叫做gd32f427_test(下文简称工程根目录),然后把开发板示例程序的01_GPIO_Running_LED作为模板拷贝出来,这样就不用改时钟那些的配置了,在根目录下面创建一个文件夹,叫做Core,把Utilities文件夹下面的gd32f427v_start.c gd32f427v_start.h,以及main.c以及gd32f4xx_it.c等放到这个目录里面,固件库的Firmware文件夹复制出来,放到工程根目录,如下图
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAD7KKAACsWd9_D0o649.jpg)
然后新建工程,创建一个文件夹叫做MDK-ARM,然后打开keil5,创建工程
1、指定器件为GD32F427VK
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqAShwNAAB4rRM7mnE444.jpg)
2、加入相关的文件
startup文件
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqAZYJKAAB2iah-0LY271.jpg)
core文件夹下面的几个文件,其实这里放的就是用户app的相关程序
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAFVkiAACAXN7N4OY966.jpg)
驱动相关文件,就是GD32F4xx_standard_peripheral的Sources里面的文件
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqAQ-TGAADrq1rdpX8189.jpg)
system文件
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqABLoHAABpSAFq_xg337.jpg)
点击OK,然后改一下头文件包含路径
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAIxraAABUt6mMraE407.jpg)
点击OK,尝试编译一下,由于这里包含的很多库文件,并不是每个都用到,为了节省空间,可以开O3优化
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAc20fAACrLe4rW1Y969.jpg)
编译没问题,然后下载试下。这里要修改下载器配置,板上调试器固件是CMSIS-DAP的,这里要改下
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqAWDJ6AADtn6uMsMA041.jpg)
改了之后点击settings,要看到SW Devices能识别到,另外可以配置一下下载后自动运行
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAHqzDAAC0PGyH5eU961.jpg)
之后尝试下载调试等功能都正常,说明环境搭建完成
2.FreeRTOS移植
目前市面上流行的RTOS有很多款, 其中FreeRTOS的特点是用户群体大,而且免费。下面介绍一下如何移植
首先下载freertos的源码
这里有两个选项,随便一个都行。选择使用RTOS,多数情况下是需要它的多线程调度功能,所以对版本没有要求。
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAXJoeAADO2t034w8821.jpg)
下载源码之后,把FreeRTOS\FreeRTOS-Kernel的整个目录复制到gd32f427_test(下文简称工程根目录)的Third_Party\FreeRTOS\Source
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqACA9NAADYoUMGHk8339.jpg)
然后里面的portable目录,只保留MemMang和RVDS目录,其他全部删掉,RVDS目录里面只保留ARM_CM4F,其他删掉。keil配置一下,将源码和头文件加入工程中。注意MemMang里面不同的heap文件只用加入一个,一般heap_4用的比较多
![image.png image.png](//file.elecfans.com/web2/M00/87/CD/pYYBAGOtSKqAJ49zAAC91Xk1NW4883.jpg)
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKuANqubAACU4fEhgd0378.jpg)
然后需要配置一下freertos的一些参数,这些参数一般在头文件FreeRTOSConfig.h中,模板可以从
GD32F4xx_Demo_Suites_V2.6.1\GD32470Z_EVAL_Demo_Suites\Projects\26_ENET\Projects\FreeRTOS_tcpudp\inc复制一个过来。
之后要修改一下gd32f4xx_it.c文件,注释掉
void SVC_Handler(void)
void PendSV_Handler(void)
void SysTick_Handler(void)
三个函数,然后由于freertos要使用systick,因此systick.c和systick.h两个文件里面的东西都可以移除掉了
然后把main.c里面的内容修改一下,使用xTaskCreate创建一个默认的线程,然后使用vTaskStartScheduler启动freertos。把点LED的逻辑放到第一个线程里面。如下图
![image.png image.png](//file.elecfans.com/web2/M00/87/46/poYBAGOtSKqAB5klAAHUGxeBs78427.jpg)
编译无错误之后下载运行,可以看到LED的闪烁变成了5s,说明freertos已经移植成功。
原作者:chenjie