在GD固件庫的時鐘配置函數里看到這樣一段神秘代碼,研究分析后不得不佩服原廠固件庫里的細節處理:
查看定義是一段代碼,對AHB 2分頻后延時了一段時間:
在這段代碼后面可以看到程序將RCU_CFG0和RCU_CFG1兩個時鐘寄存器做了復位:
如果是程序復位啟動后第一次執行這段代碼,應該是沒有什么意義的,但產品設計時一般都會有一個BootLoader和APP兩段程序,當BootLoader跳轉到APP時,MCU的時鐘已經處于一個高頻狀態,直接執行RCU的復位意味著時鐘會立刻切到內部8M運行。
而通過查看DATASHEET,可以看到MCU在最大主頻下和默認復位主頻下的電流差距是很大的:
這樣的內部電流瞬間變化一般會導致內部電源的波動,這種波動情況下執行的指令是不可靠的,如果硬件設計時MCU去耦電容設計不合理,很可能加劇這個波動,此時如果指令錯誤了那很可能會跑飛進入hardfault。
而GD固件庫里這個神秘代碼,在高頻的情況下可以將系統時鐘降低一半并延時等待穩定,最后再復位時鐘寄存器降到8M的系統時鐘。這樣就讓電流變化有一個過渡,避免了內部電源波動過大。
——>
——>
-
芯片
+關注
關注
455文章
50816瀏覽量
423615 -
單片機
+關注
關注
6037文章
44558瀏覽量
635304 -
mcu
+關注
關注
146文章
17148瀏覽量
351197 -
GD32
+關注
關注
7文章
403瀏覽量
24351
發布評論請先 登錄
相關推薦
評論