


通过阅读本文, 您将了解到:
1:GD32F303的主要特色以及类似的STM32的价格对比
2:如何用cubemx创建gd32f303的工程
3:如何使用120Mhz的主频
4:如何开启32位硬件浮点(Keil中开启FPU)
我手里芯片为GD32F303RCT6,有256kb的Flash容量,主频可达120Mhz,cortex-m4架构,淘宝上,单片零售价格在4~6元之间。
STM32F103RCT6,有256kb的Flash容量,主频可达72Mhz,cortex-m3架构,淘宝上,单片零售价格也在4~6元之间。注:STM32F103RCT6与GD32F303RCT6引脚功能兼容,外设寄存器兼容。
STM32F303RCT6,有256kb的Flash容量,主频可达72Mhz,cortex-m4架构,淘宝上,单片零售价格在15~20元之间。注:STM32F103RCT6与GD32F303RCT6引脚功能兼容,外设寄存器不兼容。
GD32F303远优于STM32F103,和STM32F303RCT6不相上下,但是因为GD主频更高,所以代码实际运行的更快些。另外,GD的功耗高于STM。
前文说到,STM32F103RCT6与GD32F303RCT6引脚功能兼容,外设寄存器兼容,所以,你直接创建STM32F103RCT6的工程即可,甚至你的ST-Link,CubeMonitor之类的玩意儿,都可以直接用。
官方手册:


时钟配置
您配吧,亲~
GD32F303RCT6是cortex-m4的架构,但是STM32F103RCT6是cortex-m3,m3的架构是没有fpu的。
玩过armcc的你应该知道,开启硬件浮点,需要如下条件:
条件1:编译参数里面,带上-mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
条件2:置位CPACR寄存器(0xE000ED88)的第20~23这4个比特位(CP10、CP11)
条件3:过编译
先说条件1:非常好达成,如果你用keil,你把随便改个cortex-m4架构的芯片,比如STM32F303RCT6,然后在target里面启用Floating Point Hardware:Single Precesion
再说条件2:非常好达成,你直接在入口函数加入
(*(volatile uint32_t *)(0xE000ED88)) |= (15 << 20);
见图:

开启fpu
再说条件3:你一编译,会报一个错,大概是一个宏判断过不去,直接注释掉即可,如图:

强行过编译
测试一下吧,我随便写了点UB:

测试
看到这个VMUL.F32了吗,这就是速度的象征!