STM32使用非8M晶振时如何修改代码
生活随笔
收集整理的這篇文章主要介紹了
STM32使用非8M晶振时如何修改代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目前能找到的大部分代碼都是默認8M外部晶振的,若使用的晶振不是8M則需要作一些修改。例如這次我使用的外部晶振是12M的,作如下修改。
??? 1.首先需要修改"Option for target 'xxx'"中的Target -> Xtal(Mhz)處的值(改為12MHz)。此處修改影響Debug時觀察到的時鐘數值。
???
?
??? 2.在system_stm32f10x.c開頭的注釋里有:
* 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depedning on* the product used), refer to "HSE_VALUE" define in "stm32f10x.h" file. * When HSE is used as system clock source, directly or through PLL, and you* are using different crystal you have to adapt the HSE value to your own* configuration.?? ????根據描述,將stm32f10x.h中大約在0121行找到,修改掉。
#if !defined HSE_VALUE#ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */#else #define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */#endif /* STM32F10X_CL */#endif /* HSE_VALUE */??? 不過很奇怪的是,即使修改了此處的值,PLL的時鐘還是不正確(程序依舊講PLL按9倍頻配置)。此處有待進一步探究(目前暫時只知道編譯的代碼沒有用到HSE_VALUE)。
很多外設,包括I2S, USART等設備都要用到這個參數,設置錯誤的話通信會受影響,波特率錯誤。
?
??? 3.順著代碼尋找原因,最后發現真正起作用的部分在system_stm32f10x.c里的SetSysClockTo72(void)函數(0993行,這里假設我們希望MCU工作在72MHZ)。
??????? 在1058行有這樣一段代碼:
#else /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */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_PLLMULL9改為RCC_CFGR_PLLMULL6。
總結
以上是生活随笔為你收集整理的STM32使用非8M晶振时如何修改代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32F103 IAP编程调试记录
- 下一篇: STM32F103CB IAP+APP