stm32f4晶振管理

2021-12-30 02:14:54 字數 1306 閱讀 1752

最近要使用stm32f4晶元做開發,根據自己的程式設計習慣,做一些學習記錄,以便於自己以後查閱。我們在設計電路的時候,一般都會設計mcu使用外部晶振,筆者工作中曾經遇到外部晶振故障晶元無法正常啟動問題(無內部晶振老的mcu),使用示波器發現的,在更換了外部晶振以後,問題就解決了。由此筆者想到,stm32f4系列自帶內部晶振,在外部晶振故障的時候完全可以使用內部晶振,確保軟體能夠正常工作。因為f4外部晶振通常使用168mhz,而內部晶振預設並不是168mhz,參考了網上一些資料,查閱了晶元手冊,設計了乙個軟體保護,當外部晶振故障的時候,自動使用內部晶振鎖定為168mhz。

stm32官方巡迴演講裡面介紹說內部晶振現在已經能夠可靠使用了,我決定實測一下,結果發現這個說法不太準確。使用系統滴答定時器中斷裡普通io用100hz方波間接測量,示波器實測使用外部晶振100hz很穩定,使用內部晶振在100--103hz跳動,所以最新官方演講說內部晶振穩定性很好可以直接使用這個說法有待商酌。

具體實現思路如下,編寫外部晶振軟體設定函式,編寫內部晶振軟體設定函式,在時鐘安全中斷裡做好時鐘切換工作。**如下

void nmi_handler(void) }

/ *

*使用hse時,設定系統時鐘的步驟

* 1,開啟hse,並等待hse穩定

* 2,設定ahb,apb2,apb1的預分頻因子

* 3,設定pll的時鐘**

*設定vco輸入時鐘分頻因子m

*設定vco輸出時鐘倍頻因子

*設定pllclk時鐘分頻因子p

*設定otg fs,sdio,rng時鐘分頻因子q

* 4,開啟pll ,並等待pll穩定

* 5,把pllck切換為系統時鐘sysclk

* 6,讀取時鐘切換狀態位,確保pllclk被選為系統

時鐘 * / void hse_setsysclock(uint32_t frequency)

其他}

/ *

*使用hsi時,設定系統時鐘的步驟

* 1,開啟hsi,並等待hsi穩定

* 2,設定ahb,apb2,apb1的預分頻因子

* 3,設定pll的時鐘**

*設定vco輸入時鐘分頻因子m

*設定vco輸出

時鐘倍頻因子*設定sysclk時鐘分頻因子p

*設定otg fs,sdio,rng時鐘分頻因子q

* 4,開啟pll,並等待pll穩定

* 5,把pllck切換為系統時鐘sysclk

* 6,讀取時鐘切換狀態位,確保pllclk被選為系統

時鐘 * /

void hsi_setsysclock(void)

stm32f4 定時捕獲

概述 1000hz 20 80 占空比現象 1000hz 51 58 占空比現象 關於本文的更多詳情請往下看。筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的 對初學者一看就明白,以簡單明瞭的工程供大家學習。stm32f4 tim輸入波形捕獲 脈衝頻率 占空比 例項 訪問密碼 st...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...