本帖最后由 IdeaMing 于 2018-3-16 10:15 編輯
STM32F103時鐘配置流程
前言:一般情況下單片機的時鐘配置是單片機程序中的第一步,也是很重要的一步。這時候我們需要考慮以下幾個問題。 1. 系統時鐘的時鐘源用哪個。 2. 系統時鐘頻率要多少。 3. 每個模塊的時鐘頻率要多少。 4. 如果外部時鐘出了問題,這個時候時鐘是怎么運行的。
下面就針對性的講一講STM32F103的時鐘配置。
知識點:1. 系統復位后,HSI振蕩器被選為系統時鐘。當時鐘源被直接或通過PLL間接作為系統時鐘時,它將不能被停止。
2. STM32F103的三個可以作為系統時鐘的時鐘源,分別是HSI、HSE、PLL。而PLL的時鐘源是HSI/2(內部RC振蕩器二分頻)、HSE。
3.如果使用HSI,系統時鐘我們能達到的最大頻率是64MHz,如果使用HSE,系統時鐘最大頻率是72MHz。
4.APB時鐘有低速PCLK1和高速PCLK2;PCLK1是從HCLK二分頻得到的,最大36MHZ,根據上一條知識點如果是使用HSI,則最快是32MHz。
5. PLL的設定需要在使能之前,一旦PLL使能后參數不可更改。
6.附錄是一些縮寫的英文全稱,也有一些補充的知識點。
步驟:第一步 初始化時鐘 不管現在SYSCLK的時鐘源是哪個,我們要更換時鐘源。先RCC_DeInit();
第二步 打開時鐘 內部高速時鐘HSI RCC_HSICmd(ENABLE); 外部高速時鐘HSE RCC_HSEConfig(RCC_HSE_ON);
第三步 等待時鐘晶振工作 HSI While(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)==RESET); HSE While(RCC_GetFlagStatus(RCC_FLAG_HSERDY)==RESET);
第四步 設置AHB時鐘HCLK RCC_HCLKConfig(RCC_SYSCLK_Div1); 分頻系數自己設定,一般都是RCC_SYSCLK_Div1即不分頻。
第五步 設置低速APB時鐘 RCC_PCLK1Config(RCC_HCLK_Div2);
第六步 設置高速APB時鐘 RCC_PCLK2Config(RCC_HCLK_Div1); 第七步 設置Flash預緩沖 FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // 使能flash預緩沖 Flash的操作也沒有總線時鐘快,所以需要總線在操作flash時稍作等待。推薦根據HCLK設置。 0-24MHz時,取FLASH_Latency_0;24-48MHz,取FLASH_Latency_1;48-72MHz時,取FLASH_Latency_2。
第八步 設置PLL 如果不使用PLL,請略過此步驟 HSI RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16 ); HSE RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9 );
第九步 打開PLL 如果不使用PLL,請略過此步驟 RCC_PLLCmd(ENABLE);
第十步 等待PLL工作 如果不使用PLL,請略過此步驟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)== RESET);
第十一步 設置系統時鐘 HSI RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); HSE RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); PLL RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 第十二步 判斷是否是設置的時鐘 HSI while(RCC_GetSYSCLKSource()!= 0x00); HSE while(RCC_GetSYSCLKSource()!= 0x04); PLL while(RCC_GetSYSCLKSource()!= 0x08);
附錄:一些縮寫的英文全稱及中文翻譯,幫助理解記憶。IWDG IndependentWatchdog 獨立看門狗
RTC RealTime Clock 實時時鐘 時鐘源可以是LSI,或者LSE,再或者HSE的128分頻。 LSI LowSpeed Internal 內部低速時鐘 RC振蕩器,頻率為40kHz。供IWDG使用,還能作為RTC的時鐘源。 HSI HighSpeed Internal 內部高速時鐘 RC振蕩器,頻率為8MHz。 HSE HighSpeed External 外部高速時鐘 可接石英/陶瓷諧振器,或者接外部時鐘源,頻率范圍為4MHz~16MHz。
PLL PhaseLockedLoop 鎖相環倍頻輸出 其時鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,
SYSCLK SystemColock 系統時鐘
AHB AdvancedHigh performance Bus 高級高性能總線 AHB主要用于高性能模塊(如CPU、DMA和DSP等)之間的連接。
APB Advanced PeripheralBus 高級外圍設備總線 APB主要用于外設模塊(如ADC、USB、SPI、UART等)與AHB之間的連接。
HCLK Advanced High performance Bus Clock 高級高性能總線時鐘 就是SYSCLK經過AHBPrescaler(預分頻器)后得到的AHB的時鐘。
PCLK PeripheralBus Clock 外圍設備總線時鐘 PCLK有兩個,一個是低速的PCLK1,另一個是高速的PCLK2。 PCLK1是經過APB1Prescaler后得到的APB1時鐘。 PCLK2是經過APB2 Prescaler后得到的APB2時鐘。
FCLK FreeRuning Clock 自由運行時鐘 為供給CPU內核的時鐘信號,CPU的主頻就是指這個信號;1/FCLK就是CPU時鐘周期。 為什么叫自由運行時鐘呢?下面是別人家的講解。 ARMJISHU注:FCLK 為處理器的自由振蕩的處理器時鐘,用來采樣中斷和為調試模塊計時。在處理器休眠時,通過FCLK 保證可以采樣到中斷和跟蹤休眠事件。 Cortex-M3內核的“自由運行時鐘(free running clock)”FCLK。“自由”表現在它不來自系統時鐘HCLK,因此在系統時鐘停止時FCLK也繼續運行。FCLK和HCLK 互相同步。FCLK 是一個自由振蕩的HCLK。FCLK 和HCLK 應該互相平衡,保證進入Cortex-M3 時的延遲相同。
STM32F103時鐘配置流程.pdf
(394.67 KB, 下載次數: 165)
2018-3-16 10:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|