没有合适的资源?快使用搜索试试~ 我知道了~
首页GD32替换STM32注意事项.pdf
GD32替换STM32注意事项.pdf

GD32 介绍与 STM32 兼容性汇总。STM32的代码直接在GD32上运行需要小部分的修改。按教程做对应修改就行哈。
资源详情
资源评论
资源推荐

GD32 介绍与 STM32 兼容性汇总
一、 GD32 与 STM32 异同
1. 相同点
1)
外围引脚定义:
相同型号的管脚定义相同
2) Cortex M3 内核:
STM32F103 内核 R1P1 版本, STM32F205 内核 R2P1,
GD32 内核 R2P1 版本,此内核修复了 R1P1 的一些 bug
3)
芯片内部寄存器,
外部 IP 寄存器地址 : 逻辑地址相同,主要是根据 STM32 的寄存器和物理地址,
做的正向研发.
4)
函数库文件: 函数库相同,优化需要更改头文件
5)
编译工具: 完全相同 例如:keil MDK、IAR
6)
型号命名方式: 完全相同
2. 外围硬件区别
1)
电压范围(ADC): GD32F: 2.6-3.6V STM32F: 2.0-3.6V(外部电压)
GD32F: 1.2V(内核电压)STM32F: 1.8V(内核电压)
2)
BOOT 0 管脚: Flash 程序运行时,BOOT0 在 STM32 上可悬空,GD32 必须外
部下拉(从 Flash 运行,BOOT0 必须下拉地)
3)
ESD 参数: STM32 人体模式 2KV,空气模式 500V
GD32 人体模式 4KV(内测 5KV),空气模式 10KV(内测 15KV)
3. 内部结构差别
1) 启动时间: GD32 启动时间相同,由于 GD 运行稍快,需要延长上电时间
配置(2ms)
2) 主频时钟: GD32F10 系列主频 108MHZ STM32F10 系列主频 72MHZ
3) Flash 擦除时间: GD32 是 60ms/page,STM 30ms/page
4) FLASH 容量: GD32 最大容量 3M Byte
5) SRAM 空间: GD32F103 系列、GD32F105G 大容量系列 SRAM 96K
6) VB 外扩总线 FSMC:GD32 100PIN 配置总线输出,STM32 144PIN 并且 256k 以上
才配置总线输出
4. 功耗区别(以 128k 以下容量的作为参考)
1) 睡眠模式 Sleep: GD32F: 12.4mA STM32F10X: 7.5mA
2) 深度睡眠模式 Deep Sleep: GD32F: 1.4mA STM32F10X: 24uA
3) 待机模式 Stand By: GD32F: 10.5uA STM32F10X: 3.4uA
4) 运行功耗: GD32F: 32.4mA/72M STM32F10X: 52mA/72M

5. 内部 FLASH 区别
1) ISP: 擦写时间同 STM32 有差异,使用新版 ISP 软件
2) IAP: 擦写时间相同,按字写入,按页擦除
3) 存储寿命: 10 万次擦写,数据保存 20 年以上
4) 加密特性: 除了常规的禁止读出和 96 位 ID 号码加密之外,GD32 数据写入
Flash 时,具有存储逻辑地址连续,物理地址不连续的特性。
二、 GD32 介绍与兼容性详析
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)。

2. 内部 Flash
1) 芯片设置读保护用法
描述 由于 GD 的 Flash 是自己的专利技术,STM 的 Flash 是第三方提供的,所以 GD
的 Flash 和 STM 的 Flash 有些许差异。GD 的擦除时间会长一点
解决方法 在写完 KEY 序列以后,需要读该位,确认 key 已生效。
所以,这里应该插入
While( ! (FLASH->CR & 0x200 ) ); // Wait OPTWRE
或可简单插入 两个 NOP。
__NOP();
__NOP();
在 ST 库中,只有
FLASH_Status FLASH_EraseOptionBytes(void)
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data)
FLASH_Status FLASH_EnableWriteProtection(uint32_t FLASH_Pages)
FLASH_Status FLASH_ReadOutProtection(FunctionalState NewState)
四个函数需要修改。
2) IAP 在应用中编程
描述 GD32 由于自有 flash 的 0 访问时序,同 STM32 在 Flash 的 Erase 和 Program 上
存在差别,GD32 的 Erase 和 Program 时间比 STM32 的稍微长些,建议对 Erase
和 Program 时间进行修改。
解决方法 将宏定义
#define EraseTimeout ((uint32_t)0x000B0000)
#define ProgramTimeout ((uint32_t)0x00002000)
修改为:
#define EraseTimeout ((uint32_t)0x000FFFFF)
#define ProgramTimeout ((uint32_t)0x0000FFFF)
备 注 : Erase 和 Program 时 间 宏 定 义 在 stm32f10x_flash.c 源 文 件 中
(路径:\..\Libraries\STM32F10x_StdPeriph_Driver\src)
3) 用 IAR 下载配置
解决方法 在批量生产的时候首先会烧写一个 USB 的 boot,这个 boot 自动运行后在由上
位机软件进行烧写应用程序。如果 boot 程序不能自动运行则需要重新插拔一
次电源。给生产造成一些麻烦。产生不能自动运行程序的原因是如果程序设置
读保护的话需要等待 FLASH_CR 的第 9[OPTWRE]位为 1.如果没有置位的话继续
执行就会出错。由于 ST 的执行速度慢,程序执行到读 FLASH_CR 寄存器的时候
该位已经置 1,GD 的执行速度比较快,程序运行到这的时候该位还没置 1,因
此需要在 FLASH_ReadOutProtection 函数里面添加一些轮询该位为 1 或者加一
些延时。
剩余10页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论2