打印

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

[复制链接]
1711|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用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 | 只看该作者
这么看起来其实很简单哈

使用特权

评论回复
5
wowu| | 2022-1-5 12:54 | 只看该作者
需要更改的地方很少

使用特权

评论回复
6
xiaoqizi| | 2022-1-5 12:58 | 只看该作者
也就是对时钟要求比较高了是吧

使用特权

评论回复
7
木木guainv| | 2022-1-5 13:01 | 只看该作者
GD的flash最小是多少啊

使用特权

评论回复
8
磨砂| | 2022-1-5 13:01 | 只看该作者
可以移植hal库吗

使用特权

评论回复
9
zydq853| | 2022-1-15 10:33 | 只看该作者
好像103RCT6的ADC采样有问题,用RBT6没有问题,用RCT6,采样口(PC5)会输出一个3.56V的电压,干扰了采样。现在无解

使用特权

评论回复
10
huquanz711| | 2022-1-15 19:05 | 只看该作者
谢谢分享

使用特权

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

本版积分规则

65

主题

213

帖子

1

粉丝