随着国产MCU的崛起,GD32因其高性价比和与STM32的高度兼容性,成为许多项目的替代选择。但硬件替换后,代码仍需针对性调整。本文基于实际移植经验,总结关键修改点。
1. 时钟系统配置
GD32主频支持108MHz(STM32通常为72MHz),需同步调整时钟树配置:启动超时宏:修改HSE_STARTUP_TIMEOUT值,STM32默认0x0500(2ms),GD32需改为0xFFFF以适应更长起振时间。
PLL倍频系数:GD32通过RCC_CFGR寄存器的PLLMUL[4:0]位域配置PLL,需确保输出频率不超过108MHz。
2. 外设初始化差异
GPIO配置
STM32:GPIO_Init(GPIOA, &GPIO_InitStruct)仅需端口参数。
GD32:需额外指定引脚数量,如gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, PIN_0 | PIN_1)。
SPI配置
时钟分频:GD32的SPI时钟分频系数实际频率更高(如SPI_BaudRatePrescaler_2对应36MHz,STM32为18MHz),需根据外设时序要求调整。
引脚复用:GD32的PB3/PB4默认复用JTAG功能,需禁用JTAG:
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);
3. Flash操作优化
GD32的Flash专利技术导致读写时序差异:
延时等待:在FLASH_EraseOptionBytes等函数中插入等待循环:
while (!(FLASH->CR & 0x200)); // 等待OPTWRE位生效
超时宏定义:修改擦除/编程超时时间:

4. 中断处理修正
标志位清除:GD32需手动清除中断标志位,如定时器输入捕获模式:

EXTI沿检测:关闭中断前需禁用沿检测寄存器:

5. 延时函数调整
GD32代码执行速度更快,软件延时需重新校准:
循环延时:通过示波器实测调整循环次数,例如:

推荐方案:使用硬件定时器替代软件延时。
6. 特殊功能适配
低功耗模式:GD32的PA8引脚在待机模式下需悬空(避免复用为内部时钟输出)。
USB配置:主频限制为48/72/96MHz(或超频至120MHz),且APB1时钟不得低于24MHz。
本文凡亿教育原创文章,转载请注明来源!

扫码关注










































