和大部分同志一样,楼主也是初次接触GD32的MCU,不过看名字就很亲切,因为他和STM32有着诸多的相似之处,那么就让我们一起来领略一下二者的兼容性吧:
1、 系统
1) 晶振起振区别
描述:启动时间,GD32 与STM32 启动时间都是2ms,实际上GD 的执行效率快,所以ST 的HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)是2ms,但是这个宏定义值在GD 上时间就更加短了,所以要加大这个值的设置。
解决方法:将宏定义:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)
修改为:
#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)
备注:启动时间宏定义所在位置:
1、在V3.X 的库,其启动时间宏定义在stm32f10x.h 头文件中(路径:\..\Libraries\CMSIS\CM3)。(库版本的不同,所在目录也有所不同)
2、在V3.0 以前的库,其启动时间宏定义在stm32f10x_rcc.c 源文件中(HSEStartUp_TimeOut)(路径:\..\Libraries\STM32F10x_StdPeriph_Driver\src)。
2) 部分客户使用有源晶振出现问题,在GD32F103 小容量产品,发现会在MCU 的复位管脚一直把电平拉到0.89V,电平不能保持在高电平。
描述:是由于部分有源晶振起振时间太快,复位信号还没有完成导致的
解决方法:就是在有源晶振的输入端与地之前并上一个30pf电容。
3) GD32 MCU 主频支持108MHz 高性能,在代码移植方面需要注意事项
描述:GD32 通过芯片内部加大缓存,提高了相同工作频率下的代码执行速度,带来了高性能的使用体验。
解决方法:因此如果代码有用到for 循环或while 循环语句做精确定时的,定时时间会由于代码执行速度加快而使循环的时间变短。使用Timer 定时器则没有影响。
4) GD32F105/107 系列MCU 配置为108MHz 有何不同
描述:通过Clock configuration register (RCC_CFGR) 中, 第21 : 18 位为PLLMUL[3:0],再结合第29 位PLLMUL[4]组成5 位的位域来确定PLL 倍频系数,即通过软件配置来定义PLL 的倍频系数,且PLL 输出频率绝对不得超过最高主频(108MHz)。