STM32时钟库函数RCC_DeInit介绍

void RCC_DeInit(void)
{
RCC->CR |= (uint32_t)0x00000001; //开启内部8MHz时钟
#ifndef STM32F10X_CL //STM32F10X_CL指的是STM32互联系列微处理器
  RCC->CFGR &= (uint32_t)0xF8FF0000; //其它类型处理器的CFGR寄存器中27-31位是保留位,24-26为MCO位
#else  //而互联型处理器的CFGR寄存器中,28-31位是保留位,24-27位属MCO
  RCC->CFGR &= (uint32_t)0xF0FF0000; //初始化CFGR寄存器,详见注释第1条
#endif   
  
   RCC->CR &= (uint32_t)0xFEF6FFFF; //初始化CR寄存器,详见注释第2条
RCC->CR &= (uint32_t)0xFFFBFFFF; // 位18=0, HSE没有旁路,只有在HSE关闭时才可以设置

   RCC->CFGR &= (uint32_t)0xFF80FFFF; // 设置CFGR寄存器,详见注释第3条

#ifdef STM32F10X_CL //互联型微控制器的设置
  RCC->CR &= (uint32_t)0xEBFFFFFF;
RCC->CIR = 0x00FF0000;
RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
RCC->CIR = 0x009F0000; //初始化CIR时钟中断寄存器,详见注释第4条
RCC->CFGR2 = 0x00000000;      
#else
RCC->CIR = 0x009F0000;
#endif
}
注释:
1、位26(27)-24=000: 微控制器没有时钟输出;
   位15-14=00: PCLK2(APB2时钟)二分频后作为ADC时钟;
   位13-11=000: HCLK不分频,即APB2高速时钟PCLK2等于AHB时钟;
   位10-8=000: 低速APB1时钟(PCLK1)不分频;
   位7-4=0000: AHB时钟不分频,等于系统时钟SYSCLK;
   位3-2=00: HSI(内部高速时钟)作为系统时钟;
   位1-0=00:  HSI(内部高速时钟)作为系统时钟。
2、位24=0: PLL关闭;
   位19=0: 时钟检测器关闭,当外部时钟就绪后开启;
   位16=0: 外部时钟HSE关闭。
3、位22=0:PLL时钟1.5倍分频作为USB时钟;
   位21-18=0000: PLL二倍频输出,只有PLL关闭时才可以设置;
   位17=0: HSE不分频, 只有PLL关闭时才可以设置;
   位16=0:HSI时钟2分频后作为PLL输入时钟, 只有PLL关闭时才可以设置;
4、位23=1:清除时钟安全系统中断标志位;
   位20=1: 清除PLL就绪中断标志位;
   位19=1: 清除HSE就绪中断标志位;
   位18=1:  清除HSI就绪中断标志位;
   位17=1: 清除LSE就绪中断标志位;
   位16=1:  清除LSI就绪中断标志位。

你可能感兴趣的:(stm32)