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