文章目录
- 0 前言
- 1 开发方式选择
- 2 标准库模板的创建
- 3 遇到的问题和解决方法
0 前言
因为项目关系,需要使用GD32。之前对此早有耳闻,知道这个是一个STM32的替代品,据说甚至可以直接烧录STM32的程序(一般是同型号),但是GD32型号的编排更加复杂,不能和STM32一一对应,所以,从长远角度来看,还是建议按照官方推荐的方式来开发,其实本质上和STM32开发是差不多的,所以对于熟练STM32开发的人来说上手还是挺快的,关键是要学会查找和使用资料。
GD32开发资料下载——记得点开右上角的箭头可以展开更多
1 开发方式选择
可能是为了跟上STM32的脚步,兆易最近(2024.04)也开发了适配自家产品的集成开发环境——Embedded Builder,对标STM32的CubeIDE。
但是我体验下来的感觉并不好,一个是支持的型号有限(没有我正在使用的型号),一个是win7(莫得选择)支持不太好,打开之后不知道为啥显示屏一大段黑条,关掉软件之后就立刻好了(可能是显卡要求比较高?)。
综上,我不得不放弃私以为更好用的HAL库,转而使用标准库进行开发。以下是开发记录。
2 标准库模板的创建
标准库开发的第一步,毫无疑问肯定是搭建一个项目工程的模板,这样之后的项目可以直接复制这个模板,然后在此基础上添加自己需要的代码即可,非常方便。
- 下载资料
首先打开上面那个链接,然后在左侧找到对应的芯片型号,这里以GD32E230为例,首先点开 “GD32E2 MCU” 标签页,然后在右侧就能看到这个型号相关的资料:
当然,这些资料不是都需要下载的,如果是初学,只需要下载必要的文件即可,其他的留个印象,之后如果涉及到可以再来翻阅。
主要需要下载的有以下几个资料:
- GD32E230xx Datasheet 芯片数据手册,查看外设引脚必备;
- GD32E23x User Manual 用户手册,主要是介绍芯片的特性,存储,外设及其相关寄存器等,编程必备;【注意,这个文件有中文版,不想翻译的可以考虑只下载这个】
- GD32E23x AddOn 软件支持包,使用Keil开发必备;
- GD32E23x Firmware Library 标准固件库,搭建模板必备。
另外,“用户手册”和“其他资料”中有很多“AN”开头的文件,适用于特定问题的解决,最好留个印象,这样遇到相关的问题不至于不知道去哪里找资料了。
- 创建标准库模板工程
基本流程和STM32配置差不多,这里只展示文件的目录结构,具体的配置流程可以参考之前的一篇文章。
|-- CMSIS # 内核文件
| |-- gd32e23x.h
| |-- gd32e23x_libopt.h
| |-- startup_gd32e23x.s
| |-- system_gd32e23x.c
| `-- system_gd32e23x.h
|-- Hardware # 自定义外设
| |-- usart.c
| `-- usart.h
|-- Objects # 编译链接文件
| |-- gd32e23x_adc.d
| |-- gd32e23x_adc.o
| |-- ......
| `-- usart.o
|-- RTE # Real Time Environment,Keil自带的内核相关文件
| `-- _Target_1
| `-- RTE_Components.h
|-- StdPeriph # 标准外设库
| |-- Include
| | |-- gd32e23x_adc.h
| | |-- gd32e23x_cmp.h
| | |-- gd32e23x_crc.h
| | |-- ......
| | `-- gd32e23x_wwdgt.h
| `-- Source
| |-- gd32e23x_adc.c
| |-- gd32e23x_cmp.c
| |-- gd32e23x_crc.c
| |-- ......
| `-- gd32e23x_wwdgt.c
|-- User # 用户文件
| |-- gd32e23x_it.c
| |-- gd32e23x_it.h
| |-- main.c
| |-- main.h
| |-- systick.c
| `-- systick.h
|-- gde2_project.uvguix.Zoey # 最外层目录的这些文件都是项目相关的文件
|-- gde2_project.uvoptx
`-- gde2_project.uvprojx9 directories, 112 files
值得一提的是,这里的RTE文件夹并不是自己建立的,而是在创建项目时首先添加到工程中的:
之所以要添加这个貌似是因为GD32E2xx固件库中,不存在这个core文件?总之必须得添加这个,不然编译的时候一堆报错。
注意,这个步骤仅限于部分型号,加不加其实取决于固件库的文件夹中有没有内核文件,如果有,直接添加文件即可,因为这一步本质上就是复制Keil安装的支持包中的内核文件而已。
这里再提一下
gd32e23x_libopt.h
这个文件,相当于是一个选择外设的文件,可以根据需要注释或取消注释包含的头文件,默认全部包含,但是它可能和其他文件不在一个文件夹内,而是在example文件夹中。
添加好文件之后,接下来就是点击魔法棒来配置项目工程了,首要的肯定是先将自定义文件夹的路径包含在项目中,然后在宏定义中加上:
USE_STDPERIPH_DRIVER,GD32E230
后面这个芯片型号取决于实际使用的是啥,好像也可以不加
配置好之后,点击编译,如果没有问题的话,一般是 0 Error(s) ,但是!可能会有一堆Warnings,如果有强迫症的,可能已经开始将警告内容复制去浏览器搜索解决方案了,我也尝试过,但无果。
后来和其他项目工程模板仔细比对之后发现,因为使用了RTE,工程的默认编译器变成了AC6,而且不能换成AC5,所以出现了很多语法格式上的警告,所以解决办法也很简单,将警告的等级降一降:
亲测有效!
掌握了标准库项目模板的构建,基本也算是入门了,其他的主要就是外设的使用了,这个将在后续博客中介绍。
3 遇到的问题和解决方法
- 下载程序之后不运行
当发现程序运行结果和想象中不一样时,可以使用仿真器单步运行。然后就发现代码卡在开始文件的汇编代码中,也就是后缀为.s的文件。最后发现是系统的时钟配置错误。
如注释所示,这里要选择一个时钟源和主频,然后如果板子上没有使用外部晶振,这里仍然选择了后缀为8M_HXTAL
或25M_HXTAL
的选项,时钟选择错误,导致系统不运行。关于时钟的选择,芯片特性手册和使用手册上都有提到,可以去参考。