STM32晶振任意修改方法(8M改12M方法)

 

由於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,確定保存,再編譯,調試,你就會發現,所有的參數都回歸的正常軌道。

 

用jlik去檢測程序運行時間可能不準確的原因:

在keil下點擊魔術棒-->Debug-->Trace 並且將系統時鐘改爲你設置的系統時鐘即可,如下圖

 

 

仿真方式SWD與JTAG區別
    (1) SWD 模式比 JTAG 在高速模式下面更加可靠。 在大數據量的情況下面 JTAG 下載程序會失敗, 但是 SWD 發生的機率會小很多。基本使用 JTAG 仿真模式的情況下是可以直接使用 SWD 模式的, 只要你的仿真器支持。 所以推薦大家使用這個模式。
    (2) 在GPIO 剛好缺一個的時候, 可以使用 SWD 仿真, 這種模式支持更少的引腳。
    (3) 在板子的體積有限的時候推薦使用 SWD 模式, 它需要的引腳少, 當然需要的 PCB 空間就小啦! 比如你可以選擇一個很小的 2.54 間距的 5 芯端子做仿真接口。

   二、 市面上的常用仿真器對 SWD 模式支持情況
    (1) JLINKV6 支持 SWD 仿真模式, 速度較慢。
    (2) JLINKV7 比較好的支持 SWD 仿真模式, 速度有了明顯的提高,速度是 JLINKV6 的 6 倍。
    (3) JLINKV8 非常好的支持 SWD 仿真模式, 速度可以到 10M。
    (4) ULINK1 不支持 SWD 模式。
    (5) 盜版 ULINK2 非常好的支持 SWD 模式, 速度可以達到 10M。
    (6) 正版 ULINK2 非常好的支持 SWD 模式, 速度可以達到 10M。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章