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就绪中断标志位。