STM32 HSE初始化失敗的解決以及HSI初始化

2021-07-11 08:34:29 字數 1019 閱讀 9441

偶然遇到乙個問題,假設hse初始化失敗怎麼辦,庫函式內沒有提供處理只是寫了 

if (hsestatus == (uint32_t)0x01)

。。。讓我們自己處理。平常我們都是用sysclk =72m。這是在hse的情況下才能達到的。如果hse初始化不成功只能使用hsi。注意上圖時鐘樹hsi想使用pll要2分頻。這樣才4m的頻率。pll倍頻16也才64m。沒有達到我們常用的72m。這樣如果我們設定hsi並且16倍頻像定時器等外設就要重新計算頻率。(uartx如果使用庫函式是不需要自己計算波特率的,庫函式內部會自己計算,這點不用擔心)。用hse時又要計算72m的對應資料,想想挺麻煩。為了方便在滿足系統執行速度的情況下。我可以設定hse通過pllxtpre位2分頻然後pll16倍頻這樣sysclk就達到64m。如果初始化hse成功sysclk為64m,如果hse初始化失敗繼續初始化hsi。這樣一來無論內部時鐘還是外部時鐘都會是64m。

將**貼在此處方便以後檢視

u16 ncount = 0;

errorstatus hsestartupstatus;

//時鐘管理重置

rcc_deinit();

//開啟外部晶振

rcc_hseconfig(rcc_hse_on);

//等待外部晶振就緒

while (rcc_getflagstatus(rcc_flag_hserdy) == reset && ncount++ < hse_startup_timeout);

//等待外部晶振就緒

hsestartupstatus = rcc_waitforhsestartup();     

if (hsestartupstatus == success)    

//hse初始化失敗,初始化內部hsi

else

ps:如果使用systick注意此時的時鐘頻率是64m

void configsystick(void)

乙個STM32 HSE應用配置的相關話題

不論stm8還是stm32系列的mcu,晶元復位後預設時鐘源都是內部hsi,要使用外部時鐘源hse的話,得通過軟體對相關控制暫存器進行使能配置才行。如果使用外部hse的話,一般有兩種模式 1 外部晶體 陶瓷諧振器 hse晶體 模式 這種模式用得比較常見,hse晶體可以為系統提供較為精確的時鐘源。在時...

stm32埠初始化

今天上課,點亮數碼管,gpio初始化後,數碼管上有一段亂碼。要讓這亂碼消失掉,需要改變gpio初始化的順序。在gpio埠使能後,要加odr 埠暫存器 控制 gpio inittypedef gpio initstructure 定義乙個結構體 rcc apb2periphclockcmd rcc a...

關於stm32 SDIO初始化TF卡 失敗的問題

類似問題 現象 初始化4bit sdio模式的tf卡,卡死在初始化過程中。問題現象 移植於野火開發板相關例程。問題現象中的tf卡在野火開發板中初始化正常。當tf卡初始化卡死的時候,測得tf卡迴路耗電200ma以上,而單獨為tf卡迴路供電的bl8555典型供電電流為150ma。所以懷疑和供電瓶頸有關。...