这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STM32F103学习之RCC配置

共1条 1/1 1 跳转至

STM32F103学习之RCC配置

高工
2018-12-20 18:33:43     打赏
STM32F103时钟配置


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

输出参数:无




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]