1. 程式人生 > 實用技巧 >STM32f1時鐘系統整理

STM32f1時鐘系統整理

STM32f1時鐘系統

一、祭出STM32F1的官方時鐘框圖

二、暫存器說明

1、時鐘控制暫存器RCC_CR

第0位:HSION(0,關閉;1,開啟)

第1位:HSIRDY(0,HSI未就緒;1,HSI就緒)

第16位:HSEON(0,關閉;1,開啟)

第17位:HSERDY(0,HSE未就緒;1,HSE就緒)

第19位:CSSON(0,時鐘檢測關閉;1,時鐘監控開啟)

第24位:PLLON(0,關閉PLL;1,使能PLL)

第25位:PLLRDY(0,PLL未鎖定,1:PLL鎖定)

2、時鐘配置暫存器RCC_CFGR

第1:0位SW: 軟體設定時鐘源

00:HSI為系統時鐘

01:HSE為系統時鐘

10:PLL作為系統時鐘

11:時鐘不可用

第3:2位SWS:硬體指示時鐘源

00:HSI為系統時鐘

01:HSE為系統時鐘

10:PLL作為系統時鐘

11:時鐘不可用

第7:4位HPRE:軟體設定AHB的分頻係數(具體見參考手冊)

第10:8位PPPRE1:軟體設定低速APB1(PCLK1)的與分頻係數(具體見參考手冊)

第13:11位PPPRE2:軟體設定高速APB2(PCLK2)的預分頻係數(具體見參考手冊)

第15:14位ADCPPE:軟體設定ADC的時鐘頻率(最大14Mhz)

00:APB2的2分頻

01:APB2的4分頻

10:APB2的6分頻

11:APB2的8分頻

第16位PLLSRC:軟體選擇PLL的時鐘源(關閉PLL時寫入)

0:HSI的2分頻作為PLL的輸入時鐘

1:HSE作為PLL的輸入時鐘

第17位PLLXTPRE:軟體選擇HSE作為PLL輸入時是否分頻

0:HSE不分頻

1:HSE 2分頻

第21:18位PLLMUL:軟體設定PLL的倍頻係數(最高不超過72M,實測超過100M後還能工作)

詳見參考手冊

第22位USBPRE:軟體設定USB時鐘

0:PLL時鐘1.5倍分頻作為USB時鐘

1:PLL直接作為USB時鐘

第26:24位MCO:時鐘輸出PA8引腳(對於STM32F1來說,最高頻率不能超過IO口的頻率50Mhz)

0xx:無輸出

100:輸出系統時鐘SYSCLK

101:HSI輸出

110:HSE輸出

111:PLL的2分頻輸出

3、時鐘中斷暫存器RCC_CIR

4、APB2外設復位暫存器(RCC_APB2RSTR)

對應位寫1復位相應外設,寫0無作用

5、APB1 外設復位暫存器 (RCC_APB1RSTR)

對應位寫1復位相應外設,寫0無作用

6、 AHB外設時鐘使能暫存器 (RCC_AHBENR)

對應位寫1開啟相應外設,寫0關閉外設

7、 APB2 外設時鐘使能暫存器(RCC_APB2ENR)

對應位寫1開啟相應外設,寫0關閉外設

8、 APB1 外設時鐘使能暫存器(RCC_APB1ENR)

對應位寫1開啟相應外設,寫0關閉外設

9、備份域控制暫存器 (RCC_BDCR)

第0位LSEON:軟體設定,外部低速振盪器使能:0:關閉,1:開啟;

第1位LSERDY:硬體指示,外部低速LSE就緒:0:未就緒,1:就緒;

第15位RTCEN:RTC時鐘使能:0:關閉,1開啟;

10、控制/狀態暫存器(RCC_CSR)

第0位LSION:軟體設定,內部低速振盪器就緒:0,:40kHz振盪器時鐘就緒

第1位LSIRDY:硬體指示,內部低速振盪器就緒:1:就緒,0:未就緒;

第29位IWDGRSTF視窗看門狗復位標誌:1:發生視窗看門狗復位;0:未發生

第30位WWDGRSTF獨立看門狗復位標誌:1:發生獨立看門狗復位;0:未發生

主要相關庫函式:

1、void RCC_DeInit(void);//將外設RCC暫存器設為預設值;

2、void RCC_HSEConfig(uint32_t RCC_HSE);//設定外部高速晶振(HSE);

3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//調整內部高速晶振(HSI)校準值

4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能內部高速晶振(HSI)

5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//設定PLL時鐘源及倍頻係數

6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL

7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//設定系統時鐘(SYSCLK)源

8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//設定AHB時鐘(HCLK)

9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//設定低速AHB時鐘(PCLK1)

10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//設定高速AHB時鐘(PCLK2)

11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中斷

12、void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//設定USB時鐘(USBCLK)

13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//設定ADC時鐘(ADCCLK)

14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外設時鐘

15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外設時鐘

16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外設時鐘

17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//強制或者釋放高速AHB外設復位

18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//強制或者釋放高速APB(APB2)外設復位

19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//強制或者釋放低速APB(APB1)外設復位

20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能時鐘安全系統

21、void RCC_MCOConfig(uint8_t RCC_MCO);//選擇在MCO管腳上輸出的時鐘源,警告:當選中系統時鐘作為MCO管腳的輸出時,注意它的時鐘頻率不超過50MHz(最大I/O速率)。

22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//檢查指定的RCC標誌位

//RCC_FLAG_HSIRDY,HSI晶振就緒;RCC_FLAG_HSERDY,HSE晶振就緒;

//RCC_FLAG_PLLRDY,PLL就緒;RCC_FLAG_LSERDY,LSI晶振就緒;

//RCC_FLAG_LSIRDY,LSE晶振就緒;RCC_FLAG_PINRST,管腳復位 ;

//RCC_FLAG_PORRST,POR/PDR復位;RCC_FLAG_SFTRST,軟體復位 ;

//RCC_FLAG_IWDGRST,IWDG復位;RCC_FLAG_WWDGRST,WWDG復位;

//RCC_FLAG_LPWRRST,低功耗復位

23、void RCC_ClearFlag(void);//清除RCC的復位標誌位

24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//檢查指定的RCC中斷髮生與否

//輸入:RCC_IT_LSIRDY,LSI晶振就緒中斷;RCC_IT_LSERDY,LSE晶振就緒中斷

//RCC_IT_HSIRDY,HSI晶振就緒中斷;RCC_IT_HSERDY,HSE晶振就緒中斷

//RCC_IT_PLLRDY,PLL就緒中斷;RCC_IT_CSS,時鐘安全系統中斷

25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中斷待處理位

//RCC_IT_LSIRDY,LSI晶振就緒中斷;RCC_IT_LSERDY,LSE晶振就緒中斷

//RCC_IT_HSIRDY,HSI晶振就緒中斷;RCC_IT_HSERDY,HSE晶振就緒中斷

//RCC_IT_PLLRDY,PLL就緒中斷;RCC_IT_CSS,時鐘安全系統中斷