QQ2224043166 发表于 2021-12-8 19:27

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

使用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已生效,修改如下:

总共需要修改如下四个函数:

[*]
[*]
[*]
[*]
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时间上有差异,修改如下:
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

谢谢分享
页: [1]
查看完整版本: GD32如何替换STM32库文件注意事项