GD32如何替换STM32库文件注意事项

[复制链接]
2491|9
 楼主| QQ2224043166 发表于 2021-12-8 19:27 | 显示全部楼层 |阅读模式
使用ST标准库开发需要修改的地方

1)GD对时序要求严格,配置外设需要先打开时钟,在进行外设配置,否则可能导致外设无法配置成功;ST的可以先配置在开时钟。

2)修改外部晶振起振超时时间,不用外部晶振可跳过这步。

原因:GD与ST的启动时间存在差异,为了让GD MCU更准确复位。

修改:


将宏定义:#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500)修改为:#define HSE_STARTUP_TIMEOUT ((uint16_t)0xFFFF)


3)GD32F10X flash取值零等待,而ST需要2个等待周期,因此,一些精确延时或者模拟IIC或SPI的代码可能需要修改。

原因:GD32采用专利技术提高了相同工作频率下的代码执行速度。

修改:如果使用for或while循环做精确定时的,定时会由于代码执行速度加快而使循环的时间变短,因此需要仿真重新计算设计延时。使用Timer定时器无影响。

4)在代码中设置读保护,如果使用外部工具读保护比如JFLASH或脱机烧录器设置,可跳过此步骤。

在写完KEY序列后,需要读该位确认key已生效,修改如下:

9090261b0967f1c643.png
总共需要修改如下四个函数:


FLASH_Status FLASH_EraseOptionBytes(void);FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);uint32_t FLASH_GetWriteProtectionOptionByte(void);FlagStatus FLASH_GetReadOutProtectionStatus(void);


5)GD与ST在flash的Erase和Program时间上有差异,修改如下:

1165061b09694882af.png
6)需求flash大于256K注意,小于256K可以忽略这项。

与ST不同,GD的flash存在分区的概念,前256K,CPU执行指令零等待,称code区,此范围外称为dataZ区。

两者在擦写操作上没有区别,但在读操作时间上存在较大差别,code区代码取值零等待,data区执行代码有较大延迟,代码执行效率比code区慢一个数量级,因此data区通常不建议运行对实时性要求高的代码。

为解决这个问题,可以使用分散加载的方法,比如把初始化代码,图片代码等放到data区。
daichaodai 发表于 2021-12-9 08:30 来自手机 | 显示全部楼层
谢谢楼主分享
tpgf 发表于 2022-1-5 12:16 | 显示全部楼层
主要是需要注意flash的大小
wakayi 发表于 2022-1-5 12:52 | 显示全部楼层
这么看起来其实很简单哈
wowu 发表于 2022-1-5 12:54 | 显示全部楼层
需要更改的地方很少
xiaoqizi 发表于 2022-1-5 12:58 | 显示全部楼层
也就是对时钟要求比较高了是吧
木木guainv 发表于 2022-1-5 13:01 | 显示全部楼层
GD的flash最小是多少啊
磨砂 发表于 2022-1-5 13:01 | 显示全部楼层
可以移植hal库吗
zydq853 发表于 2022-1-15 10:33 | 显示全部楼层
好像103RCT6的ADC采样有问题,用RBT6没有问题,用RCT6,采样口(PC5)会输出一个3.56V的电压,干扰了采样。现在无解
huquanz711 发表于 2022-1-15 19:05 来自手机 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

233

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部