1、时钟控制寄存器(RCC_CR):(复位值为0x0000 xx83,内部低速时钟使能和就绪,内部时钟校准)
主要功能:内外部高速时钟的使能和就绪标志(含内部高速时钟校准调整),外部高速时钟旁路,时钟安全系统CSS使能,PLL使能和PLL就绪标志。
2、时钟配置寄存器(RCC_CFGR):(复位值为0x0000 0000)
主要功能:系统时钟源切换及状态,AHB、APB1、APB2、ADC、USB预分频,PLL输入时钟源选择及HSE输入PLL分频选择,PLL倍频系数,MCO(PA8)引脚微控制器时钟输出。
3、时钟中断寄存器 (RCC_CIR):(复位值: 0x0000 0000)
主要功能:LSI、LSE、HIS、HSE、PLL就绪中断标志,HSE时钟失效导致时钟安全系统中断标志,LSI、LSE、HIS、HSE、PLL就绪中断使能,清除LSI、LSE、HIS、HSE、PLL就绪中断,清除时钟安全系统中断。
4、APB2外设复位寄存器 (RCC_APB2RSTR):(复位值: 0x0000 0000)
主要功能:AFIO、IOPA、IOPB、IOPC、IOPD、IOPE、IOPF、IOPG、ADC1、ADC2、TIM1、SPI1、TIM8、USART1、ADC3复位。
5、APB1外设复位寄存器 (RCC_APB1RSTR) :(复位值: 0x0000 0000)
主要功能:TIM2、TIM3、TIM4、TIM5、TIM6、TIM7、WWDG、SPI2、SPI3、USART2、USART3、USART4、USART5、I2C1、I2C2、USB、CAN、BKP、PWR、DAC复位。
6、AHB外设时钟使能寄存器 (RCC_AHBENR) :(复位值: 0x0000 0014睡眠模式时SRAM、闪存接口电路时钟开启)
主要功能:DMA1、DMA2、SRAM、FLITF、CRC、FSMC、SDIO时钟使能。
7、APB2外设时钟使能寄存器(RCC_APB2ENR) :(复位值: 0x0000 0000)
主要功能:AFIO、IOPA、IOPB、IOPC、IOPD、IOPE、IOPF、IOPG、ADC1、ADC2、TIM1、SPI1、TIM8、USART1、ADC3时钟使能。
8、APB1外设时钟使能寄存器(RCC_APB1ENR) :(复位值: 0x0000 0000)
主要功能:TIM2、TIM3、TIM4、TIM5、TIM6、TIM7、WWDG、SPI2、SPI3、USART2、USART3、USART4、USART5、I2C1、I2C2、USB、CAN、BKP、PWR、DAC时钟使能。
9、备份域控制寄存器 (RCC_BDCR) :(复位值: 0x0000 0000)
主要功能:外部低速振荡器使能和就绪标志及旁路、RTC时钟源选择和时钟使能、备份域软件复位。
10、控制/状态寄存器 (RCC_CSR) :(复位值: 0x0C00 0000 NRST引脚复位标志、上电/掉电复位标志)
主要功能:内部低速振荡器就绪、清除复位标志、NRST引脚复位标志、上电/掉电复位标志、软件复位标志、独立看门狗复位标志、窗口看门狗复位标志、低功耗复位标志。
三、初始化设置
采用8MHz 外部HSE 时钟,在 MDK 编译平台中,程序的时钟设置参数流程如下:
将 RCC 寄存器重新设置为默认值:RCC_DeInit();
打开外部高速时钟晶振 HSE :
RCC_HSEConfig(RCC_HSE_ON);
等待外部高速时钟晶振工作:
HSEStartUpStatus = RCC_WaitForHSEStartUp();
设置 AHB 时钟 (HCLK) :
RCC_HCLKConfig(RCC_SYSCLK_Div1);
设置APB 2时钟 (APB2) :
RCC_PCLK2Config(RCC_HCLK_Div1);
设置APB1 时钟 (APB1) :
RCC_PCLK1Config(RCC_HCLK_Div2);
设置 PLL :
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
打开 PLL :
RCC_PLLCmd(ENABLE);
等待 PLL 工作:
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
设置系统时钟:
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
判断 PLL 是否是系统时钟:
while(RCC_GetSYSCLKSource() != 0x08);
1、使用库函数进行时钟系统初始化配置
void RCC_config()//如果外部晶振为8M,PLLCLK=SYSCLK=72M,HCLK=72M,//P2CLK=72M,P1CLK=36M,ADCCLK=36M,USBCLK=48M,TIMCLK=72M
{
ErrorStatus HSEStartUpStatus; //
定义错误状态变量
RCC_DeInit();//将RCC寄存器重新设置为默认值
RCC_HSEConfig(RCC_HSE_ON); //打开外部高速时钟晶振
HSEStartUpStatus = RCC_WaitForHSEStartUp();//
等待外部高速时钟晶振工作
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB不分频,HCLK=SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1);//设置APB2不分频,P2CLK=HCLK
RCC_PCLK1Config(RCC_HCLK_Div2); //设置APB1 为2分频,P1CLK=HCLK/2
FLASH_SetLatency(FLASH_Latency_2);//设置FLASH代码延时
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能预取指缓存
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);//设置PLL时钟源,
//外部时钟不分频,为HSE的9倍频8MHz * 9 = 72MHz
RCC_PLLCmd(ENABLE);//使能PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//等待PLL准备就绪
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置PLL为系统时钟源
while(RCC_GetSYSCLKSource() != 0x08);//判断PLL是否是系统时钟
}
/*RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE); //
打开
PB
和
PD
用于点亮
LED
灯*/
} |