關於stm32外接12mhz晶振的處理辦法
(出處: amobbs 阿莫電子論壇)
由於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中斷,它不會1.5ms中斷。
現在,我們也得出了乙個結論,在keil mdk編譯環境的設定引數的優先順序是高於原檔案中的設定的。
STM32使用外部16MHZ晶振總結
做小封裝產品設計的朋友或許知道3225 4pin的晶振,為何8mhz晶振批量 要到2元一片,而16mhz晶振只需要0.4元甚至更少。究其原因是因為3225封裝的晶振目前全球最低頻率一般為8mhz,而國內8mhz達不到精度指標,所以市場上的8mhz晶振一般為進口晶振,因此成本被壟斷。圖1 3225封裝...
STM32標準庫使用外部16MHZ晶振修改程式配置
參考時鐘樹,修改圖中紅框內的分頻。查詢prediv1,查詢手冊發現由rcc cfgr暫存器控制。在system stm32f10x.c檔案中對static void setsysclockto72 void 函式進行修改 將rcc cfgr的bit17置1。rcc cfgr uint32 t 0x0...
關於STM32 軟體復位
對於stm32 來說軟體復位有兩種方式 1 採用官方自帶的軟體庫 在官方軟體庫的stm32f10x nvic.c 檔案裡直接提供了系統復位的函式 void nvic generatesystemreset void 但是不是直接呼叫這個函式就ok 了?在cortex m3 權威指南中有這麼一句話 這...