打印
[研电赛技术支持]

GD32如何替换STM32?

[复制链接]
858|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

GD32F103是GD早期的产品,GD32E103和GD32F303是对GD32F103的升级和优化,所以4者是兼容的,虽然内核不同,但是通用 外设几乎很少涉及到内核部分,在时间急迫的情况下可以使用ST的库开发。

使用特权

评论回复
沙发
漫天星yl|  楼主 | 2021-2-28 22:49 | 只看该作者

使用特权

评论回复
板凳
漫天星yl|  楼主 | 2021-2-28 22:50 | 只看该作者
4)型号命名方式完全相同,所以替代只需找尾缀相同的型号即可,例如:STM32F103C8T6 与 GD32E103C8T6。
5)仿真工具:JLINK GDLINK

使用特权

评论回复
地板
漫天星yl|  楼主 | 2021-2-28 22:51 | 只看该作者
二、外围硬件区别

使用特权

评论回复
5
漫天星yl|  楼主 | 2021-2-28 22:51 | 只看该作者
三、硬件替换需要注意的地方
从上面的介绍中,我们可以看出,GD32F30/E103系列和STM32F103系列是兼容的,但也需要一些注意的地方。 1)BOOT0必须接10K下拉或接GND,ST可悬空,这点很重要。 2)RC复位电路必须要有,否则MCU可能不能正常工作,ST的有时候可以不要。 3)有时候发现用仿真器连接不上。因为GD的swd接口驱动能力比ST弱,可以有如下几种方式解决: a、线尽可能短一些; b、降低SWD通讯速率; c、SWDIO接10k上拉,SWCLK接10k下拉。 4)使用电池供电等,注意GD的工作电压,例如跌落到2.0V~2.6V区间,ST还能工作,GD可能无法启动或工作异常。

使用特权

评论回复
6
漫天星yl|  楼主 | 2021-2-28 22:52 | 只看该作者
四、使用ST标准库开发需要修改的地方 1)GD对时序要求严格,配置外设需要先打开时钟,在进行外设配置,否则可能导致外设无法配置成功;ST的可以先配置在开时钟。

使用特权

评论回复
7
漫天星yl|  楼主 | 2021-2-28 22:53 | 只看该作者
2)修改外部晶振起振超时时间,不用外部晶振可跳过这步。 原因:GD与ST的启动时间存在差异,为了让GD MCU更准确复位。 修改:
将宏定义: #define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) 修改为: #define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)

使用特权

评论回复
8
漫天星yl|  楼主 | 2021-2-28 22:54 | 只看该作者
3)GD32F10X flash取值零等待,而ST需要2个等待周期,因此,一些精确延时或者模拟IIC或SPI的代码可能需要修改。 原因:GD32采用专利技术提高了相同工作频率下的代码执行速度。 修改:如果使用for或while循环做精确定时的,定时会由于代码执行速度加快而使循环的时间变短,因此需要仿真重新计算设计延时。 使用Timer定时器无影响。

使用特权

评论回复
9
漫天星yl|  楼主 | 2021-2-28 22:54 | 只看该作者
4)在代码中设置读保护,如果使用外部工具读保护比如JFLASH或脱机烧录器设置,可跳过此步骤。 在写完KEY序列后,需要读该位确认key已生效,修改如下:

使用特权

评论回复
10
漫天星yl|  楼主 | 2021-2-28 22:56 | 只看该作者
总共需要修改如下四个函数:


1闪存状态FLASH_EraseOptionBytes(无效);

2 FLASH_STARTFLASH_Progr amOpt IMITByteData(uint 32_.T地址,uint 8_.T数据);

3 uint32.T闪存_GetWriteProtectionOptionByte(无效);

4 FlagStatus flash GetReadoutProtectionStatus(无效);

使用特权

评论回复
11
漫天星yl|  楼主 | 2021-2-28 22:57 | 只看该作者
5) GD与ST在flash的Erase和Program时间上有差异,修改如下:

使用特权

评论回复
12
漫天星yl|  楼主 | 2021-2-28 22:58 | 只看该作者

使用特权

评论回复
13
漫天星yl|  楼主 | 2021-2-28 22:59 | 只看该作者
6)需求flash大于256K注意,小于256K可以忽略这项。 与ST不同,GD的flash存在分区的概念,前256K,CPU执行指令零等待,称code区,此范围外称为dataZ区。两者在擦写操作上没有 区别,但在读操作时间上存在较大差别,code区代码取值零等待,data区执行代码有较大延迟,代码执行效率比code区慢一个数量 级,因此data区通常不建议运行对实时性要求高的代码,为解决这个问题,可以使用分散加载的方法,比如把初始化代码,图片代码等 放到data区。

使用特权

评论回复
14
漫天星yl|  楼主 | 2021-2-28 23:00 | 只看该作者
总结:至此,经过以上修改,在不使用USB和网络能复杂协议的代码,就可以使用ST的代码操作了。

使用特权

评论回复
15
cjmlllh| | 2021-3-1 10:33 | 只看该作者
我在用GD32F103C8T6替换STM32F103C8T6的时候,进入STOP模式后用RTC唤醒,唤醒之后喂狗无效导致复位,这个有办法解决么?

使用特权

评论回复
16
fghaaa| | 2021-3-31 11:18 | 只看该作者
我照着步骤更改之后,程序在GD32跑不起来是怎么回事

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

311

帖子

0

粉丝