【STM32单片机时钟配置库函数解析】

STM32单片机时钟配置库函数解析

文章目的

扫盲stm32单片机时钟配置函数作用,方便后续开发。

时钟图

图一:时钟图 图1:时钟树

在这里插入图片描述)图2:系统结构图

库函数内容及作用

void RCC_DeInit(void);

复位RCC时钟配置为默认复位状态。一般在配置时钟之前使用。

void RCC_HSEConfig(uint32_t RCC_HSE);

配置外部高速振荡器(HSE),RCC_HSE =

RCC_HSE_OFF //关闭高速外部晶振
RCC_HSE_ON//打开高速外部晶振
RCC_HSE_Bypass //外部时钟旁路的HSE振荡器,这个模式一般是多CPU协作,直接引入其他主单片机的时钟输出。
在这里插入图片描述

ErrorStatus RCC_WaitForHSEStartUp(void);

等待高速外部晶振稳定,当返回值!=0时稳定。通常用来开启外部高速时钟后,判断稳定了再进行后续时钟配置。

void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);

调整内部高速振荡器(HSI)校准值。传入参数为微调整的数值

void RCC_HSICmd(FunctionalState NewState);

高速内部时钟使能。

在这里插入图片描述

void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);

PLL配置,选择PLL时钟源及乘法因子(倍频数)

在这里插入图片描述

void RCC_PLLCmd(FunctionalState NewState);

使能PLL

void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);

设置系统时钟来源,如下图,可选RCC_SYSCLKSource_HSI;RCC_SYSCLKSource_HSE;或RCC_SYSCLKSource_PLLCLK

在这里插入图片描述

uint8_t RCC_GetSYSCLKSource(void);

获取系统时钟源,如上图,返回0x00: HSI;   0x04: HSE;   0x08: PLL

void RCC_HCLKConfig(uint32_t RCC_SYSCLK);

配置AHB时钟,选择分频数。

在这里插入图片描述

void RCC_PCLK1Config(uint32_t RCC_HCLK);

配置低速APB1的分频数。

在这里插入图片描述

void RCC_PCLK2Config(uint32_t RCC_HCLK);

配置高速APB2的分频数。

在这里插入图片描述)

void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);

配置RCC触发中断源,中断源可以任意组合。

void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);

配置USB时钟分频数,1或1.5

在这里插入图片描述)

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);

配置ADC的时钟分频数

在这里插入图片描述))

void RCC_LSEConfig(uint8_t RCC_LSE);

配置外部低速晶振,打开、关闭或旁路模式。

在这里插入图片描述)

void RCC_LSICmd(FunctionalState NewState);

外部低速晶振使能。

void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);

RTC时钟源选择,低速外部、低速内部 或 高速外部÷128

在这里插入图片描述)

void RCC_RTCCLKCmd(FunctionalState NewState);

使能RTC时钟。

void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);

返回片上时钟的频率,当对HSE晶体使用分数值时,该函数的结果可能不正确。

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);

使能挂在AHB时钟线上的外设时钟包括:RCC_AHBPeriph_DMA1、RCC_AHBPeriph_DMA2、RCC_AHBPeriph_SRAM、RCC_AHBPeriph_CRC等

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

使能挂在APB2上的外设时钟,包括:RCC_APB2Periph_AFIO、RCC_APB2Periph_GPIOA等

在这里插入图片描述)

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

使能挂在APB1上的外设时钟,包括:RCC_APB1Periph_TIM2、RCC_APB1Periph_TIM3等

在这里插入图片描述

void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

释放高速APB (APB2)外围时钟。

void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

释放低速APB (APB1)外围时钟。

void RCC_BackupResetCmd(FunctionalState NewState);

释放备份区域外围时钟。

void RCC_ClockSecuritySystemCmd(FunctionalState NewState);

启用或禁用时钟安全系统。

void RCC_MCOConfig(uint8_t RCC_MCO);

选择时钟源输出到MCO引脚。一般用来检查配置的时钟是否正确。

FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);

检查设置的RCC标志是否置位,如RCC_FLAG_HSERDY等。

void RCC_ClearFlag(void);

清除RCC标志位

ITStatus RCC_GetITStatus(uint8_t RCC_IT);

检查指定的RCC中断标志位是否置位;

void RCC_ClearITPendingBit(uint8_t RCC_IT);

清除中断标志位。

举例说明

void Clock_Init_Config(void)
{
	RCC_DeInit();								//复位时钟配置
	RCC_HSEConfig(RCC_HSE_ON);					//打开外部高速时钟
	while(!RCC_WaitForHSEStartUp());			//等待外部高速时钟稳定
	RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//选择PLL时钟源为外部高速时钟,进行9倍频(共72Mhz)
	RCC_PLLCmd(ENABLE);							//使能PLL
	RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);	//选择系统时钟来源为PLL
	RCC_HCLKConfig(RCC_SYSCLK_Div1);			//配置AHB总线时钟为1分频,即72MHz
	RCC_PCLK1Config(RCC_HCLK_Div2);				//配置APB2为72MHz
	RCC_PCLK2Config(RCC_HCLK_Div1);				//配置APB1为36Mhz
}

本文完。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值