在GD固件庫(kù)的時(shí)鐘配置函數(shù)里看到這樣一段神秘代碼,研究分析后不得不佩服原廠固件庫(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)注
452文章
50206瀏覽量
420855 -
單片機(jī)
+關(guān)注
關(guān)注
6030文章
44489瀏覽量
631968 -
mcu
+關(guān)注
關(guān)注
146文章
16885瀏覽量
349914 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24106
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論