STM32的內部RC時鐘HSI RC、LSI RC可以被關閉,外部晶振時鐘HSE Osc、LSE
Osc可以被關閉或旁路,外部晶體時鐘更精確。
一、為所有外設提供時鐘
SYSCLK有三種時鐘源:HSI(8MHz)、HSE(8MHz)、PLLCLK。其中開啟CSS(時鐘監視系統)可以在HSE失能時自動切換到HSI;
PLLCLK-》USB Prescaler;
SYSCLK-》AHB Prescaler-》(HLCK,APB1 Prescaler,APB2
Prescaler):HLCK為核心總線、DMA、AHB總線提供時鐘;
APB1 Prescaler-》(PLCK1 up to 36MHz,TIM2、3、4 、5、6、7
Multiplier*1 or*2);
APB2 Prescaler-》(PLCK2 up to 72MHz,TIM1、8 Multiplier*1
or*2,ADC Prescaler)。
二、為RTC提供時鐘
RTCCLK有三種時鐘源:LSI(40KHz)、LSE(32.768KHz)、HSE/128。
三、為IDWG提供時鐘
IDWG由LSI提供時鐘。
四、引腳MCO
該引腳提供四選一的時鐘源:HSI、HSE、SYSCLK、PLLCLK/2進行檢查和時鐘輸出。
五、在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法
如果使用內部RC振蕩器而不使用外部晶振,應按照下面方法處理:
1)對于100腳或144腳的產品,OSC_IN應接地,OSC_OUT應懸空。
2)對于少于100腳的產品,有2種接法:
2.1)OSC_IN和OSC_OUT分別通過10K電阻接地。此方法可提高EMC性能。
2.2)分別重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1為推挽輸出并輸出'0'。此方法可以減小功耗并(相對上面2.1)節省2個外部電阻。
六、程序設置時鐘參數流程
1、將RCC重新設置為默認值
RCC_DeInit();
2、打開外部高速時鐘晶振HSE RCC_HSEConfig(RCC_HSE_ON);
3、等待外部高速時鐘晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();
4、設置AHB時鐘
RCC_HCLKConfig;
5、設置高速APB時鐘
RCC_PCLK2Config;
6、設置低速APB時鐘
RCC_PCLK1Config;
7、設置PLL
RCC_PLLConfig;
8、打開PLL
RCC_PLLCmd(ENABLE);
9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
10、設置系統時鐘
RCC_SYSCLKConfig;
11、判斷是否PLL是系統時鐘
while(RCC_GetSYSCLKSource() != 0x08)
12、打開要使用的外設時鐘
RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()
