1. 程式人生 > >STM32F4修改晶振頻率

STM32F4修改晶振頻率

stm32f4晶振頻率為25mhz,若開發板外接的晶振頻率為8mhz,則會導致定製器時鐘不精確,串列埠列印輸出也會亂碼,需進行一下修改:

點選system_stm32f4xx.c檔案,找到 

#define PLL_M      25 這條語句,將引數值25改為8,

在這條語句上面,右鍵點選 Go To Definination Of  "HSE_VALUE"

進入到這條語句#define HSE_VALUE    ((uint32_t)25000000)  將25000000改為 8000000. 這樣就可以解決問題咯。

 

 

stm32外部時鐘源8M晶振換成12M晶振後程序修改說明

程式執行時突然發現CPU速度變慢了,用示波器觀察發現晶振未起振。果斷換了個12M(4~16M皆可)的晶振,經測試判斷是原來8M晶振壞了。(網上查到說國產晶振容易出問題,真要做產品還是用進口的有保證些)

 

8M晶振換成12M晶振後(注意焊接晶振管腳很容易短路,最好在晶振管腳墊一個雲母片),倍頻係數需改變。

追蹤啟動檔案startup_stm32f10x_hd.s(stm32不同型號該啟動函式不同)的 LDR     R0, =SystemInit (系統時鐘設定)

 

由於STM32F10x庫官方採用的是預設的外接8MHz晶振,因此造成很多使用者也採用了8MHz的晶振,但是,8MHz的晶振不是必須的,其他頻點的晶振也是可行的,只需要在庫中做相應的修改就行。 

     在論壇上看到很多使用者反映,使用外接12MHz的晶振,會造成很多的問題,如USART的波特率不正確,Systick走時不準等問題,在無論是在實際除錯還是在軟體模擬中都會發現這個情況,其實,這不能怪ST官方,我們必須肯定ST官方為方便使用者開發所做的努力,下面我們就通過簡單的三個步驟就可以讓你隨意的使用4—16MHz之內任何頻點的晶振,我們以STM32F10x_StdPeriph_Lib_V3.4.0為例說明。      第一步,開啟stm32f10x.h,將 

 #define HSE_VALUE    ((uint32_t)8000000)  修改為: 

 #define HSE_VALUE    ((uint32_t)12000000)  

     第二步,開啟system_stm32f10x.c,修改PLL引數,將 

      

     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                          RCC_CFGR_PLLMULL)); 

     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);  修改為:   

      

     RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |                                          RCC_CFGR_PLLMULL)); 

     RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6);      至此,原檔案已經修改完成,如果你想將主頻修改至其他頻率,請自行修改。但是,到現在,如果您直接編譯除錯的話,就會出現上文所說的USART的波特率不正確,Systick走時不準等問題,原因就是我們需要進行第三部的修改,這個修改不是在原檔案中,而是在編譯環境中。我們已Keil MDK為例說明。 

     第三步,開啟你已經建立的STM32工程,選擇Projects-〉Options for target ***,找到Target標籤,你會發現,外接的晶振預設還是8MHz,我們將外接的晶振引數修改為12MHz,確定儲存,再編譯,除錯,你就會發現,所有的引數都回歸的正常軌道,設定波特率為9600,它也不會跑到14400,設定Systick為1ms中斷,它不