天天看點

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 并且将系統時鐘改為你設定的系統時鐘即可,如下圖

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

仿真方式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。

繼續閱讀