GD32固件库里时钟配置时的神秘代码?高频切低频时芯片会发生什么

[复制链接]
1889|1
 楼主| 聚沃科技 发表于 2024-6-3 13:18 | 显示全部楼层 |阅读模式
本帖最后由 聚沃科技 于 2024-6-3 13:19 编辑

在GD固件库的时钟配置函数里看到这样一段神秘代码,研究分析后不得不佩服原厂固件库里的细节处理:
4e4ad3de-0e67-4ed2-ba07-5c21bdb862a3.png
查看定义是一段代码,对AHB 2分频后延时了一段时间:
90bae52e-b80c-4e9e-a459-393cc590930e.png
在这段代码后面可以看到程序将RCU_CFG0和RCU_CFG1两个时钟寄存器做了复位:
6565c5c0-aed4-4877-b39b-e5d0f7b01439.png
如果是程序复位启动后第一次执行这段代码,应该是没有什么意义的,但产品设计时一般都会有一个BootLoader和APP两段程序,当BootLoader跳转到APP时,MCU的时钟已经处于一个高频状态,直接执行RCU的复位意味着时钟会立刻切到内部8M运行。
而通过查看DATASHEET,可以看到MCU在最大主频下和默认复位主频下的电流差距是很大的:
e0810ec4-2267-44d3-8e5b-d4be8f5520fb.png

a23058db-24d5-43f0-8471-3d8abe44ec8c.png
这样的内部电流瞬间变化一般会导致内部电源的波动,这种波动情况下执行的指令是不可靠的,如果硬件设计时MCU去耦电容设计不合理,很可能加剧这个波动,此时如果指令错误了那很可能会跑飞进入hardfault。
而GD固件库里这个神秘代码,在高频的情况下可以将系统时钟降低一半并延时等待稳定,最后再复位时钟寄存器降到8M的系统时钟。这样就让电流变化有一个过渡,避免了内部电源波动过大。
output.png

1c225fd3-f4a7-49a1-8406-cbea31992bdb.png

44c65cfe-d8ae-4e02-82f7-3ab39fd06dcd.png

本教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462











FranklinUNK 发表于 2024-6-20 20:00 | 显示全部楼层
切换的时候是不是要先关掉时钟啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

190

帖子

13

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