STM32的独立时钟源共有四个:
1.HSE(外部高速时钟,4~16MHz);
2.HSI(内部高速时钟,8MHz,精度不高);
3.LSE(外部低速时钟,32.768kHz,一般用于产生精确秒信号);
4.LSI(内部低速时钟,40kHz);
还有几个衍生的时钟
5.PLLCLK(锁相环时钟,来源可以是 HSE,HSE/2,HSI/2 这三种再进行倍频得到);
6.SYSCLK(系统时钟,来源可以是 HSE,HSI,PLL 这三种);
7.HCLK(AHB总线时钟,由SYSCLK分频得到);
8.PCLK1(APB1低速时钟,最高36MHz,由HCLK分频得到);
9.PCLK2(APB2高速时钟,最高72MHz,由HCLK分频得到);
10.RTCCLK(实时时钟,来源可以是LSI,LSE,HSE/128 这三种);
11.IWDGCLK(独立看门狗时钟,来自LSI);
在使用外设之前,应先使能其各自的时钟!
若使用3.5版本的库函数进行开发,在启动代码(startup_stm32f10x_xx.s)中会默认调用SystemInit()函数(位于文件“system_stm32f10x.c”),如果定义了这个宏(#define SYSCLK_FREQ_72MHz 72000000),则会将时钟系统初始化为如下状态:SYSCLK:72MHz / AHB:72MHz / PCLK1:36MHz / PCLK2:72MHz / PLL:72MHz,如此一来便大大简化了编程,只需在设置中预先DEFINE这个宏(SYSCLK_FREQ_72MHz)即可。初始化以后可以通过SystemCoreClock变量来获取系统时钟(SYSCLK)的状态,例如,SYSCLK为72MHz,那么SystemCoreClock的值为72000000。
与时钟配置相关的库函数整理如下:
函数原型:
void RCC_DeInit(void)
函数功能:
将外设RCC寄存器重设为缺省值
输入参数:无
输出参数:无
函数原型:
void RCC_HSEConfig(u32 RCC_HSE)
函数功能:
设置外部高速晶振(HSE)
输入参数:
RCC_HSE: HSE的新状态
RCC_HSE_OFF HSE晶振OFF
RCC_HSE_ON HSE晶振ON
RCC_HSE_Bypass HSE晶振被外部时钟旁路
输出参数:无
函数原型:
ErrorStatus RCC_WaitForHSEStartUp(void)
函数功能:
等待HSE起振,该函数将等待直到HSE就绪,或者在超时的情况下退出
输入参数:无
输出参数:
一个ErrorStatus枚举值:
SUCCESS:HSE晶振稳定且就绪
ERROR:HSE晶振未就绪
函数原型:
void RCC_AdjustHSICalibrationValue(u8 HSICalibrationValue)
函数功能:
调整内部高速晶振(HSI)校准值
输入参数:
HSICalibrationValue: 校准补偿值
该参数取值必须在0到0x1F之间
输出参数:无
函数原型:
void RCC_HSICmd(FunctionalState NewState)
函数功能:
使能或者失能内部高速晶振(HSI)
输入参数:
NewState:HSI新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul)
函数功能:
设置PLL时钟源及倍频系数
输入参数:
RCC_PLLSource:PLL的输入时钟源
RCC_PLLSource_HSI_Div2 PLL的输入时钟 = HSI时钟频率除以2
RCC_PLLSource_HSE_Div1 PLL的输入时钟 = HSE时钟频率
RCC_PLLSource_HSE_Div2 PLL的输入时钟 = HSE 时钟频率除以2
RCC_PLLMul:PLL倍频系数
RCC_PLLMul_2 PLL输入时钟 x 2
RCC_PLLMul_3 PLL输入时钟 x 3
RCC_PLLMul_4 PLL输入时钟 x 4
RCC_PLLMul_5 PLL输入时钟 x 5
RCC_PLLMul_6 PLL输入时钟 x 6
RCC_PLLMul_7 PLL输入时钟 x 7
RCC_PLLMul_8 PLL输入时钟 x 8
RCC_PLLMul_9 PLL输入时钟 x 9
RCC_PLLMul_10 PLL输入时钟 x 10
RCC_PLLMul_11 PLL输入时钟 x 11
RCC_PLLMul_12 PLL输入时钟 x 12
RCC_PLLMul_13 PLL输入时钟 x 13
RCC_PLLMul_14 PLL输入时钟 x 14
RCC_PLLMul_15 PLL输入时钟 x 15
RCC_PLLMul_16 PLL输入时钟 x 16
输出参数:无
函数原型:
void RCC_PLLCmd(FunctionalState NewState)
函数功能:
使能或者失能PLL
输入参数:
NewState:PLL新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource)
函数功能:
设置系统时钟(SYSCLK)
输入参数:
RCC_SYSCLKSource: 用作系统时钟的时钟源
RCC_SYSCLKSource_HSI 选择HSI作为系统时钟
RCC_SYSCLKSource_HSE 选择HSE作为系统时钟
RCC_SYSCLKSource_PLLCLK 选择PLL作为系统时钟
输出参数:无
函数原型:
u8 RCC_GetSYSCLKSource(void)
函数功能:
返回用作系统时钟的时钟源
输入参数:无
输出参数:
0x00:HSI作为系统时钟
0x04:HSE作为系统时钟
0x08:PLL作为系统时钟
函数原型:
void RCC_HCLKConfig(u32 RCC_HCLK)
函数功能:
设置AHB时钟(HCLK)
输入参数:
RCC_HCLK: 定义HCLK,该时钟源自系统时钟(SYSCLK)
RCC_SYSCLK_Div1 AHB时钟 = 系统时钟
RCC_SYSCLK_Div2 AHB时钟 = 系统时钟 / 2
RCC_SYSCLK_Div4 AHB时钟 = 系统时钟 / 4
RCC_SYSCLK_Div8 AHB时钟 = 系统时钟 / 8
RCC_SYSCLK_Div16 AHB时钟 = 系统时钟 / 16
RCC_SYSCLK_Div64 AHB时钟 = 系统时钟 / 64
RCC_SYSCLK_Div128 AHB时钟 = 系统时钟 / 128
RCC_SYSCLK_Div256 AHB时钟 = 系统时钟 / 256
RCC_SYSCLK_Div512 AHB时钟 = 系统时钟 / 512
输出参数:无
函数原型:
void RCC_PCLK1Config(u32 RCC_PCLK1)
函数功能:
设置低速AHB时钟(PCLK1)
输入参数:
RCC_PCLK1: 定义PCLK1,该时钟源自AHB时钟(HCLK)
RCC_HCLK_Div1 APB1时钟 = HCLK
RCC_HCLK_Div2 APB1时钟 = HCLK / 2
RCC_HCLK_Div4 APB1时钟 = HCLK / 4
RCC_HCLK_Div8 APB1时钟 = HCLK / 8
RCC_HCLK_Div16 APB1时钟 = HCLK / 16
输出参数:无
函数原型:
void RCC_PCLK2Config(u32 RCC_PCLK2)
函数功能:
设置高速AHB时钟(PCLK2)
输入参数:
RCC_PCLK2: 定义PCLK2,该时钟源自AHB时钟(HCLK)
RCC_HCLK_Div1 APB2时钟 = HCLK
RCC_HCLK_Div2 APB2时钟 = HCLK / 2
RCC_HCLK_Div4 APB2时钟 = HCLK / 4
RCC_HCLK_Div8 APB2时钟 = HCLK / 8
RCC_HCLK_Div16 APB2时钟 = HCLK / 16
输出参数:无
函数原型:
void RCC_ITConfig(u8 RCC_IT, FunctionalState NewState)
函数功能:
使能或者失能指定的RCC中断
输入参数:
RCC_IT:待使能或者失能的RCC中断源
RCC_IT_LSIRDY LSI就绪中断
RCC_IT_LSERDY LSE就绪中断
RCC_IT_HSIRDY HSI就绪中断
RCC_IT_HSERDY HSE就绪中断
RCC_IT_PLLRDY PLL就绪中断
NewState:RCC中断的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_USBCLKConfig(u32 RCC_USBCLKSource)
函数功能:
设置USB时钟(USBCLK)
输入参数:
RCC_USBCLKSource: 定义USBCLK,该时钟源自PLL输出
RCC_USBCLKSource_PLLCLK_1Div5 USB时钟 = PLL时钟除以1.5
RCC_USBCLKSource_PLLCLK_Div1 USB时钟 = PLL时钟
输出参数:无
函数原型:
void ADC_ADCCLKConfig(u32 RCC_ADCCLKSource)
函数功能:
设置ADC时钟(ADCCLK)
输入参数:
RCC_ADCCLKSource: 定义ADCCLK,该时钟源自APB2时钟
RCC_PCLK2_Div2 ADC时钟 = PCLK / 2
RCC_PCLK2_Div4 ADC时钟 = PCLK / 4
RCC_PCLK2_Div6 ADC时钟 = PCLK / 6
RCC_PCLK2_Div8 ADC时钟 = PCLK / 8
输出参数:无
函数原型:
void RCC_LSEConfig(u32 RCC_HSE)
函数功能:
设置外部低速晶振(LSE)
输入参数:
RCC_LSE: LSE的新状态
RCC_LSE_OFF LSE晶振OFF
RCC_LSE_ON LSE晶振ON
RCC_LSE_Bypass LSE晶振被外部时钟旁路
输出参数:无
函数原型:
void RCC_LSICmd(FunctionalState NewState)
函数功能:
使能或者失能内部低速晶振(LSI)
输入参数:
NewState:LSI新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
函数功能:
返回不同片上时钟的频率
输入参数:
RCC_Clocks:指向结构RCC_ClocksTypeDef的指针,包含了各个时钟的频率
RCC_ClocksTypeDef structure
RCC_ClocksTypeDef定义于文件“stm32f10x_rcc.h”:
typedef struct
{
u32 SYSCLK_Frequency;
u32 HCLK_Frequency;
u32 PCLK1_Frequency;
u32 PCLK2_Frequency;
u32 ADCCLK_Frequency;
}RCC_ClocksTypeDef;
SYSCLK_Frequency 该成员返回SYSCLK的频率,单位 Hz
HCLK_Frequency 该成员返回HCLK的频率,单位 Hz
PCLK1_Frequency 该成员返回PCLK1的频率,单位 Hz
PCLK2_Frequency 该成员返回PCLK2的频率,单位 Hz
ADCCLK_Frequency 该成员返回ADCCLK的频率,单位 Hz
输出参数:无
函数原型:
void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph,FunctionalState NewState)
函数功能:
使能或者失能AHB外设时钟
输入参数:
RCC_AHBPeriph: 门控AHB外设时钟
RCC_AHBPeriph_DMA DMA时钟
RCC_AHBPeriph_SRAM SRAM时钟
RCC_AHBPeriph_FLITF FLITF时钟
NewState:指定外设时钟的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph,
FunctionalState NewState)
函数功能:
使能或者失能APB2外设时钟
输入参数:
RCC_APB2Periph: 门控APB2外设时钟
RCC_APB2Periph_AFIO 功能复用IO时钟
RCC_APB2Periph_GPIOA GPIOA时钟
RCC_APB2Periph_GPIOB GPIOB时钟
RCC_APB2Periph_GPIOC GPIOC时钟
RCC_APB2Periph_GPIOD GPIOD时钟
RCC_APB2Periph_GPIOE GPIOE时钟
RCC_APB2Periph_ADC1 ADC1时钟
RCC_APB2Periph_ADC2 ADC2时钟
RCC_APB2Periph_TIM1 TIM1时钟
RCC_APB2Periph_SPI1 SPI1时钟
RCC_APB2Periph_USART1 USART1时钟
RCC_APB2Periph_ALL 全部APB2外设时钟
NewState:指定外设时钟的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_APB1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState)
函数功能:
使能或者失能APB1外设时钟
输入参数:
RCC_APB1Periph: 门控APB1外设时钟
RCC_APB1Periph_TIM2 TIM2时钟
RCC_APB1Periph_TIM3 TIM3时钟
RCC_APB1Periph_TIM4 TIM4时钟
RCC_APB1Periph_WWDG WWDG时钟
RCC_APB1Periph_SPI2 SPI2时钟
RCC_APB1Periph_USART2 USART2时钟
RCC_APB1Periph_USART3 USART3时钟
RCC_APB1Periph_I2C1 I2C1时钟
RCC_APB1Periph_I2C2 I2C2时钟
RCC_APB1Periph_USB USB时钟
RCC_APB1Periph_CAN CAN时钟
RCC_APB1Periph_BKP BKP时钟
RCC_APB1Periph_PWR PWR时钟
RCC_APB1Periph_ALL 全部APB1外设时钟
NewState:指定外设时钟的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_APB2PeriphResetCmd(u32 RCC_APB2Periph, FunctionalState NewState)
函数功能:
强制或者释放高速APB(APB2)外设复位
输入参数:
RCC_APB2Periph: APB2外设复位
RCC_APB2Periph_AFIO 功能复用IO时钟
RCC_APB2Periph_GPIOA GPIOA时钟
RCC_APB2Periph_GPIOB GPIOB时钟
RCC_APB2Periph_GPIOC GPIOC时钟
RCC_APB2Periph_GPIOD GPIOD时钟
RCC_APB2Periph_GPIOE GPIOE时钟
RCC_APB2Periph_ADC1 ADC1时钟
RCC_APB2Periph_ADC2 ADC2时钟
RCC_APB2Periph_TIM1 TIM1时钟
RCC_APB2Periph_SPI1 SPI1时钟
RCC_APB2Periph_USART1 USART1时钟
RCC_APB2Periph_ALL 全部APB2外设时钟
NewState:指定APB2外设复位的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:
函数原型:
void RCC_APB1PeriphResetCmd(u32 RCC_APB1Periph, FunctionalState NewState)
函数功能:
强制或者释放低速APB(APB1)外设复位
输入参数:
RCC_APB1Periph: APB1外设复位
RCC_APB1Periph_TIM2 TIM2时钟
RCC_APB1Periph_TIM3 TIM3时钟
RCC_APB1Periph_TIM4 TIM4时钟
RCC_APB1Periph_WWDG WWDG时钟
RCC_APB1Periph_SPI2 SPI2时钟
RCC_APB1Periph_USART2 USART2时钟
RCC_APB1Periph_USART3 USART3时钟
RCC_APB1Periph_I2C1 I2C1时钟
RCC_APB1Periph_I2C2 I2C2时钟
RCC_APB1Periph_USB USB时钟
RCC_APB1Periph_CAN CAN时钟
RCC_APB1Periph_BKP BKP时钟
RCC_APB1Periph_PWR PWR时钟
RCC_APB1Periph_ALL 全部APB1外设时钟
NewState:指定APB1外设复位的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:
函数原型:
void RCC_BackupResetCmd(FunctionalState NewState)
函数功能:
强制或者释放后备域复位
输入参数:
NewState:后备域复位的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
函数功能:
使能或者失能时钟安全系统
输入参数:
NewState:时钟安全系统的新状态
这个参数可以取:ENABLE或者DISABLE
输出参数:无
函数原型:
void RCC_MCOConfig(u8 RCC_MCO)
函数功能:
选择在MCO管脚上输出的时钟源
输入参数:
RCC_MCO: 指定输出的时钟源
RCC_MCO_NoClock 无时钟被选中
RCC_MCO_SYSCLK 选中系统时钟
RCC_MCO_HSI 选中HSI
RCC_MCO_HSE 选中HSE
RCC_MCO_PLLCLK_Div2 选中PLL时钟除以2
输出参数:无
函数原型:
FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG)
函数功能:
检查指定的RCC标志位设置与否
输入参数:
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 低功耗复位
输出参数:
RCC_FLAG的新状态(SET或者RESET)
函数原型:
void RCC_ClearFlag(void)
函数功能:
清除RCC的复位标志位
输入参数:无
输出参数:无
函数原型:
ITStatus RCC_GetITStatus(u8 RCC_IT)
函数功能:
检查指定的RCC中断发生与否
输入参数:
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 时钟安全系统中断
输出参数:
RCC_IT的新状态(SET或者RESET)
函数原型:
void RCC_ClearITPendingBit(u8 RCC_IT)
函数功能:
清除RCC的中断待处理位
输入参数:
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 时钟安全系统中断
输出参数:无