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,时钟安全系统中断