1、关于汇编启动文件的选择:
我们使用的芯片是 GD32F303RGT6 ,根据《GD32F303xx_Datasheet_Rev1.4.pdf》,可以得知该芯片的FLASH的大小是1024KB ,即1M.
根据 GD32 中文手册描述,
GD32F303XX FLASH 大小在256K~512K 属于高密度产品(GD32F30X_HD)
GD32F303XX FLASH 大于512K 属于超高密度产品(GD32F30X_XD)
而 GD32F305xx 和GD32F307xx 属于互联性产品(GD32F30X_CL)
所以,我们选择的汇编启动文件应该是:startup_gd32f30x_xd.s
根据不同的产品属性,选择不同后缀的汇编引导文件
2、工程设置中添加宏的问题
在工程设置中添加下面两个宏
USE_STDPERIPH_DRIVER,GD32F30X_XD
实际测试的时候,发现没有添加这两个宏,也能编译通过,调试的时候也可以调试 。
且调试的时候,默认就进入了 GD32F30X_XD 宏控条件中
难道是keil5做的这么先进了吗?可以根据芯片自动开启这个宏?可是gd32f30x.h中明明是要求开启对应的宏的。
不管怎样,为了安全,手动在工程配置中开启这两个宏。
3、添加静态库的问题
加载 .a 库文件的时候,编译会报错:
xx.a(1): error: A1167E: Invalid line start
需要在工程中点击选中该文件,然后右击,选择"options for files",在配置选项中配置该静态库的"File Type"
为"Library file ",即可解决该编译问题。一般默认情况下,.lib后缀名的文件,没有该问题。
也就是说,keil5 默认只认识.lib 为后缀名的静态库文件,如果是其他后缀面的静态库文件,需要强制性的手动指定这个文件为库文件
4、GD32 SPI主频的问题
GD32F303 SPI0 在APB2上,最高主频是120MH
SPI1和SPI2在APB1 上,最高主频是60MHZ
所以这里需要设置合适的分频系数。
5、关于函数无参的警告
移植时,出现没有参数的函数,需要在参数里填充void,避免"Deprecated declaration"的警告
这也是一个好的编程习惯。无参时,参数就是void
6、GPIO的函数接口gpio_init() 与GPIO_Init()
GD32 F3 GPIO接口中提供了两个接口,gpio_deinit() 以及 gpio_init()
尤其是gpio_init() ,这个函数直接可以配置GPIO口具体的某个管脚,配置它为输入还是输出还是AF模式,
还可以配置管脚的速度 。非常好用。
GD32F4 中只提供了 gpio_deinit()接口,没有提供 gpio_init()接口,而是提供了GPIO_Init()接口
GPIO_Init()这个接口在配置过程中,需要手动配置PIN脚的AF模式,这是非常麻烦的。
很奇怪F4系列为什么没有保留F3系列的这个接口?(两个团队开发的接口??)
7、关于中断的时钟
GD32F4 在配置中断的时候,除了要配置管脚的端口时钟,通常还需要配置RCU_SYSCFG 系统时钟
因为中断一般会使用到系统时钟
GD32F3系列里面,没有RCU_SYSCFG 系统时钟,配置中断的时候,需要额外配置RCU_AF时钟