|
由于STM32F10x庫官方采用的是默認(rèn)的外接8MHz晶振,因此造成很多用戶也采用了8MHz的晶振,但是,8MHz的晶振不是必須的,其他頻點(diǎn)的晶振也是可行的,只需要在庫中做相應(yīng)的修改就行。
在論壇上看到很多用戶反映,使用外接12MHz的晶振,會(huì)造成很多的問題,如USART的波特率不正確,Systick走時(shí)不準(zhǔn)等問題,在無論是在實(shí)際調(diào)試還是在軟件模擬中都會(huì)發(fā)現(xiàn)這個(gè)情況,其實(shí),這不能怪ST官方,我們必須肯定ST官方為方便用戶開發(fā)所做的努力,下面我們就通過簡單的三個(gè)步驟就可以讓你隨意的使用4—16MHz之內(nèi)任何頻點(diǎn)的晶振,我們以STM32F10x_StdPeriph_Lib_V3.4.0為例說明。
第一步,打開stm32f10x.h,將
#define HSE_VALUE ((uint32_t)8000000)
修改為:
#define HSE_VALUE ((uint32_t)12000000)
第二步,打開system_stm32f10x.c,修改PLL參數(shù),將
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);
至此,原文件已經(jīng)修改完成,如果你想將主頻修改至其他頻率,請(qǐng)自行修改。但是,到現(xiàn)在,如果您直接編譯調(diào)試的話,就會(huì)出現(xiàn)上文所說的USART的波特率不正確,Systick走時(shí)不準(zhǔn)等問題,原因就是我們需要進(jìn)行第三部的修改,這個(gè)修改不是在原文件中,而是在編譯環(huán)境中。我們已Keil MDK為例說明。
第三步,打開你已經(jīng)建立的STM32工程,選擇Projects-〉Options for target ***,找到Target標(biāo)簽,你會(huì)發(fā)現(xiàn),外接的晶振默認(rèn)還是8MHz,我們將外接的晶振參數(shù)修改為12MHz,確定保存,再編譯,調(diào)試,你就會(huì)發(fā)現(xiàn),所有的參數(shù)都回歸的正常軌道,設(shè)置波特率為9600,它也不會(huì)跑到14400,設(shè)置Systick為1ms中斷,它不會(huì)1.5ms中斷。
現(xiàn)在,我們也得出了一個(gè)結(jié)論,在keil MDK編譯環(huán)境的設(shè)置參數(shù)的優(yōu)先級(jí)是高于原文件中的設(shè)置的。
|
|