一、
STM32时钟配置程序分析
1、RCC
RCC是指Reset and Clock Control复位和时钟控制。主要寄存包括控制、配置、中断、外设复位、外设时钟使能、复位状态寄存器。
内核的工作时钟为SysClk,它的来源有三种:外部时钟HSE、内部时钟HSI和PLL输出时钟。当然PLL的时钟也是来自于外部或内部时钟。
2、我的源程序
void RCC_Config(void){//时钟配置,采用外部时钟和PLL
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
HSEStartUpStatus = RCC_WaitForHSEStartUp();
//如果外部时钟起振成功
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);// HCLK = SYSCLK AHB时钟等于系统时钟
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);// PCLK1 = HCLK/2 APB1时钟等于1/2AHB时钟
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6);
RCC_PLLCmd(ENABLE);
//等待PLL准备好
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择PLL作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能APB1上的TIM2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能三个IO口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//使能IO复用功能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能串口1时钟
}
二、NVIC的配置
1、NVIC
它是指嵌套向量中断控制器。中断的数目与向量表的大小相关。加上保留的,每个向量占据4个字节,一共占据0x0000,00EC个字节。NVIC的配置与具体中断相关,都在具体器件里配置,所以程序里的代码很少。
2、源代码
void NVIC_Config(void){
#ifdefVECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//STM32共有四位数字进行优先级选择
}