在GD固件庫(kù)的時(shí)鐘配置函數(shù)里看到這樣一段神秘代碼,研究分析后不得不佩服原廠(chǎng)固件庫(kù)里的細(xì)節(jié)處理:

查看定義是一段代碼,對(duì)AHB 2分頻后延時(shí)了一段時(shí)間:

在這段代碼后面可以看到程序?qū)CU_CFG0和RCU_CFG1兩個(gè)時(shí)鐘寄存器做了復(fù)位:

如果是程序復(fù)位啟動(dòng)后第一次執(zhí)行這段代碼,應(yīng)該是沒(méi)有什么意義的,但產(chǎn)品設(shè)計(jì)時(shí)一般都會(huì)有一個(gè)BootLoader和APP兩段程序,當(dāng)BootLoader跳轉(zhuǎn)到APP時(shí),MCU的時(shí)鐘已經(jīng)處于一個(gè)高頻狀態(tài),直接執(zhí)行RCU的復(fù)位意味著時(shí)鐘會(huì)立刻切到內(nèi)部8M運(yùn)行。
而通過(guò)查看DATASHEET,可以看到MCU在最大主頻下和默認(rèn)復(fù)位主頻下的電流差距是很大的:


這樣的內(nèi)部電流瞬間變化一般會(huì)導(dǎo)致內(nèi)部電源的波動(dòng),這種波動(dòng)情況下執(zhí)行的指令是不可靠的,如果硬件設(shè)計(jì)時(shí)MCU去耦電容設(shè)計(jì)不合理,很可能加劇這個(gè)波動(dòng),此時(shí)如果指令錯(cuò)誤了那很可能會(huì)跑飛進(jìn)入hardfault。
而GD固件庫(kù)里這個(gè)神秘代碼,在高頻的情況下可以將系統(tǒng)時(shí)鐘降低一半并延時(shí)等待穩(wěn)定,最后再?gòu)?fù)位時(shí)鐘寄存器降到8M的系統(tǒng)時(shí)鐘。這樣就讓電流變化有一個(gè)過(guò)渡,避免了內(nèi)部電源波動(dòng)過(guò)大。

——>

——>

-
芯片
+關(guān)注
關(guān)注
459文章
52306瀏覽量
437808 -
單片機(jī)
+關(guān)注
關(guān)注
6065文章
44946瀏覽量
648225 -
mcu
+關(guān)注
關(guān)注
146文章
17893瀏覽量
361857 -
GD32
+關(guān)注
關(guān)注
7文章
419瀏覽量
25244
發(fā)布評(píng)論請(qǐng)先 登錄

GD32固件庫(kù)里時(shí)鐘配置時(shí)的神秘代碼?高頻切低頻時(shí)芯片會(huì)發(fā)生什么?#GD32 #程序代碼 #單片機(jī)
在調(diào)試GD32芯片時(shí)遇到了時(shí)鐘配置錯(cuò)誤的問(wèn)題
STM32移植到GD32,將內(nèi)部時(shí)鐘切換為外部時(shí)鐘后無(wú)法運(yùn)行的問(wèn)題分析 精選資料分享
GD32芯片包添加步驟有哪些
分享在STM32代碼移植到GD32上時(shí)SPI部分出現(xiàn)的問(wèn)題
GD32系列總結(jié)
GD32與STM32的異同點(diǎn)
《GD32 MCU原理及固件庫(kù)開(kāi)發(fā)指南》 + 初讀感悟
《GD32 MCU原理及固件庫(kù)開(kāi)發(fā)指南》+讀后感
gd32和stm32的固件可以通用嗎?
【GD32】GD32讀取ADC數(shù)據(jù)

STM32移植到GD32,將內(nèi)部時(shí)鐘切換為外部時(shí)鐘后無(wú)法運(yùn)行的問(wèn)題分析

GD32系列總結(jié) - 時(shí)鐘樹(shù)總結(jié)及CubeMX生成代碼

使用STM32固件庫(kù)開(kāi)發(fā)GD32 匯總

評(píng)論