在GD固件库的时钟配置函数里看到这样一段神秘代码,研究分析后不得不佩服原厂固件库里的细节处理:

查看定义是一段代码,对AHB 2分频后延时了一段时间:

在这段代码后面可以看到程序将RCU_CFG0和RCU_CFG1两个时钟寄存器做了复位:

如果是程序复位启动后第一次执行这段代码,应该是没有什么意义的,但产品设计时一般都会有一个BootLoader和APP两段程序,当BootLoader跳转到APP时,MCU的时钟已经处于一个高频状态,直接执行RCU的复位意味着时钟会立刻切到内部8M运行。
而通过查看DATASHEET,可以看到MCU在最大主频下和默认复位主频下的电流差距是很大的:


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

——>

——>
-
芯片
+关注
关注
462文章
53528浏览量
458824 -
单片机
+关注
关注
6074文章
45333浏览量
663290 -
mcu
+关注
关注
147文章
18603浏览量
386527 -
GD32
+关注
关注
7文章
429浏览量
26926
发布评论请先 登录
在调试GD32芯片时遇到了时钟配置错误的问题
STM32移植到GD32,将内部时钟切换为外部时钟后无法运行的问题分析 精选资料分享
GD32芯片包添加步骤有哪些
分享在STM32代码移植到GD32上时SPI部分出现的问题
GD32与STM32的异同点
《GD32 MCU原理及固件库开发指南》 + 初读感悟
《GD32 MCU原理及固件库开发指南》+读后感
【GD32】GD32读取ADC数据
STM32移植到GD32,将内部时钟切换为外部时钟后无法运行的问题分析
GD32系列总结 - 时钟树总结及CubeMX生成代码
使用STM32固件库开发GD32 汇总

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