STM32f1时钟系统整理

    科技2025-05-01  9

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

    Processed: 0.011, SQL: 8