一、STM32時鐘配置程序分析1、RCC
本文引用地址:http://m.butianyuan.cn/article/201611/322959.htmRCC是指Reset and Clock Control復位和時鐘控制。主要寄存包括控制、配置、中斷、外設復位、外設時鐘使能、復位狀態(tài)寄存器。
內(nèi)核的工作時鐘為SysClk,它的來源有三種:外部時鐘HSE、內(nèi)部時鐘HSI和PLL輸出時鐘。當然PLL的時鐘也是來自于外部或內(nèi)部時鐘。
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時鐘等于系統(tǒng)時鐘
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作為系統(tǒng)時鐘
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
它是指嵌套向量中斷控制器。中斷的數(shù)目與向量表的大小相關。加上保留的,每個向量占據(jù)4個字節(jié),一共占據(jù)0x0000,00EC個字節(jié)。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共有四位數(shù)字進行優(yōu)先級選擇
}
評論