续上片对于RCC头文件函数解读

本文介绍了STM32F103C8T6微控制器的RCC时钟管理,包括HSE配置、HSI和LSE时钟控制、PLL配置、系统时钟与APB时钟的设置、中断标志处理等,帮助读者理解和使用这些功能进行时钟优化和系统初始化。
摘要由CSDN通过智能技术生成

前提:stm32f103c8t6非互联型,不是CL

时钟作为系统时钟都不能失能。

1.void RCC_DeInit(void)//rcc时钟复位
2.void RCC_HSEConfig(uint32_t RCC_HSE);//配置高速外部时钟的状态

1.RCC_HSE_OFF 开启HSE,此时外部无源晶振与内部HSE电路组成STM32的时钟源。

2.RCC_HSE_ON 关闭HSE,此时不使用外部高速晶振。

3.RCC_HSE_Bypass 旁路HSE,外部为有源晶振(在OSC IN上直接输入时钟信号,不需要内部HSE电路,HSE被旁路)。

3.ErrorStatus RCC_WaitForHSEStartUp(void);//等待HSE(外部高速时钟)的启动,其中有超时自动退出操作

相信许多人和我一样刚接触不知道这个函数的返回值是啥。

下面是我自己的一些看法

typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;/*定义一个类型叫做ErrorStatus,

这个枚举类型拥有两个值。所以ErrorStatus有两个返回值 */

下面是一个实力程序帮助你深入理解(OLED模块是江科大课程的)

typedef enum {ERROR1 = 0, SUCCESS1 = !ERROR} ErrorStatus1;

ErrorStatus1 demo_test(void)
{
    if(0x01==1)
        return SUCCESS1;
    else
        return ERROR1;
}

int main(void)
{
    OLED_Init();
    while (1)
    {
        OLED_ShowNum(1,1,demo_test(),2);
    }
}


4.void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)//内部高速时钟校准(调整)。由于芯片内部的RC震荡电路受到温度和器件本身的影响,所以采用内部时钟校准(调整)

例如:默认校准数值为16。将内部高速时钟设置为8MHZ,则校准为8MHZ±1%。这意味着每次改变HSICAL的一个位,时钟频率的变化大约是40kHz。具体计算过程不予以给出。

5.void RCC_HSICmd(FunctionalState NewState)使能或失能内部高速时钟。
6.void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)//找一下时钟树的图秒懂,

这里没搞明白为啥原作者将倍增器与锁相环画在一起,反正就是对输入信号进行同相位放大就行。

6.void RCC_PLLCmd(FunctionalState NewState);//使能PLL
7.void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)//系统时钟源配置
8.uint8_t RCC_GetSYSCLKSource(void)//系统时钟源查看,详细看固件库函数
9.void RCC_HCLKConfig(uint32_t RCC_SYSCLK)//给从PLL到AHB分频器上的时钟信号进行分频处理,其中HCLK是AHB的外扩展线。
10.void RCC_PCLK1Config(uint32_t RCC_HCLK)//HCLK到APB1上的时钟分频器。
11.void RCC_PCLK2Config(uint32_t RCC_HCLK)//HCLK到APB2上的时钟分频器。
12.void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//启用或禁用中断

RCC_IT_LSIRDY: 低速内部振荡器(LSI)就绪中断。当LSI时钟源准备就绪时,这个中断会被触发。是否触发看第二个参数。

13.void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)//usb时钟分频因子的配置

usb通讯频率为48mhz。

参数为RCC_USBCLKSource_PLLCLK_1Div5在PLL输出72mhz使用,72mhz x 2/3 = 48mhz。

RCC_USBCLKSource_PLLCLK_Div1在PLL输出48mhz时使用,48mhz x 1 = 48mhz。

14.void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//配置ADC的分频系数ADC接在APB2总线上
15。void RCC_LSEConfig(uint8_t RCC_LSE)//低俗外部时钟配置参考函数2.void RCC_HSEConfig(uint32_t RCC_HSE);//配置高速外部时钟的状态
16.void RCC_LSICmd(FunctionalState NewState)//低速内部时钟使能位,独立看门狗专用
17.void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource);//RTC内部实时时钟的时钟源配置。
18.void RCC_RTCCLKCmd(FunctionalState NewState);//rtc内部实时时钟的使能位
19.void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks);//获取指定时钟的实时频率
20.void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

三个外设总线上时钟使能。

21.void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalStateNewState);
void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

两个外设总线上的时钟复位

22.void RCC_BackupResetCmd(FunctionalState NewState);//备份寄存器复位控制使能
23.void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//时钟安全检测css,使能,如果时钟有问题会自动切回系统内部8Mhz时钟。
24.void RCC_MCOConfig(uint8_t RCC_MCO);//时钟输出使能配置,看时钟树
25.FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//获取某个适中的时钟状态标志位
26.void RCC_ClearFlag(void);//清除所有标志位
27.区分中断标志位与标志位
1.中断标志位当一个相应的中断事件发生后产生的标志位的变化 相关函数如下

ITStatus RCC_GetITStatus(uint8_t RCC_IT); 中断被处理后标志位自动清除

2.事件标志位,当一个事件发生后所引起的标志位的变化 相关函数如下

FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);

28.void RCC_ClearFlag(void);//清除标志位
29.void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除特定位置的中断标志位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值