在GD固件庫的時鐘配置函數里看到這樣一段神秘代碼,研究分析后不得不佩服原廠固件庫里的細節處理:

查看定義是一段代碼,對AHB 2分頻后延時了一段時間:

在這段代碼后面可以看到程序將RCU_CFG0和RCU_CFG1兩個時鐘寄存器做了復位:

如果是程序復位啟動后第一次執行這段代碼,應該是沒有什么意義的,但產品設計時一般都會有一個BootLoader和APP兩段程序,當BootLoader跳轉到APP時,MCU的時鐘已經處于一個高頻狀態,直接執行RCU的復位意味著時鐘會立刻切到內部8M運行。
而通過查看DATASHEET,可以看到MCU在最大主頻下和默認復位主頻下的電流差距是很大的:


這樣的內部電流瞬間變化一般會導致內部電源的波動,這種波動情況下執行的指令是不可靠的,如果硬件設計時MCU去耦電容設計不合理,很可能加劇這個波動,此時如果指令錯誤了那很可能會跑飛進入hardfault。
而GD固件庫里這個神秘代碼,在高頻的情況下可以將系統時鐘降低一半并延時等待穩定,最后再復位時鐘寄存器降到8M的系統時鐘。這樣就讓電流變化有一個過渡,避免了內部電源波動過大。

——>

——>

-
芯片
+關注
關注
459文章
51927瀏覽量
433754 -
單片機
+關注
關注
6058文章
44822瀏覽量
644791 -
mcu
+關注
關注
146文章
17718瀏覽量
358276 -
GD32
+關注
關注
7文章
418瀏覽量
25034
發布評論請先 登錄
相關推薦

在調試GD32芯片時遇到了時鐘配置錯誤的問題
STM32移植到GD32,將內部時鐘切換為外部時鐘后無法運行的問題分析 精選資料分享
GD32芯片包添加步驟有哪些
分享在STM32代碼移植到GD32上時SPI部分出現的問題
GD32與STM32的異同點
《GD32 MCU原理及固件庫開發指南》 + 初讀感悟
《GD32 MCU原理及固件庫開發指南》+讀后感
【GD32】GD32讀取ADC數據

STM32移植到GD32,將內部時鐘切換為外部時鐘后無法運行的問題分析

GD32系列總結 - 時鐘樹總結及CubeMX生成代碼

使用STM32固件庫開發GD32 匯總

評論