微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的嵌套中断系统NVIC和RCC详细整理

STM32的嵌套中断系统NVIC和RCC详细整理

时间:11-26 来源:互联网 点击:

//输入:RCC_AHBPeriph_DMA,DMA时钟->

//输入:RCC_APB2Periph_AFIO,功能复用IO时钟->

//输入:RCC_APB1Periph_TIM2,TIM2时钟->

__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0,0, 1, 2, 3, 4, 6, 7, 8, 9};//AHB配方表static void SetSysClock(void); //设置系统时钟的函数声明
//以下为根据不同的系统时钟的定义来声明用到的相应的函数,为后面的函数调用做好准备
#ifdef SYSCLK_FREQ_HSE
static void SetSysClockToHSE(void);
#elif defined SYSCLK_FREQ_24MHz
static void SetSysClockTo24(void);
#elif defined SYSCLK_FREQ_36MHz
static void SetSysClockTo36(void);
#elif defined SYSCLK_FREQ_48MHz
static void SetSysClockTo48(void);
#elif defined SYSCLK_FREQ_56MHz
static void SetSysClockTo56(void);
#elif defined SYSCLK_FREQ_72MHz
static void SetSysClockTo72(void);
#endif

#ifdef DATA_IN_ExtSRAM //外部SRAM选择后的初始化函数声明
static void SystemInit_ExtMemCtl(void);
#endif

void SystemInit (void)//系统初始化函数,设置系统的时钟及时钟中断(在startup_stm32f10x_md.s中调用)(复位RCC时钟配置为默认状态,直到设置时钟函数)
{


RCC->CR |= (uint32_t)0x00000001; //内部高速时钟使能,内部8MHz时钟开启


#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;//MCO微控制器没有时钟输出(对外部引脚),ADC预分频PCLK2 2分频后作为ADC时钟,APB预分频HCLK不分频,AHB预分频SYSCLK不分频,HSI作为系统时钟
//HSI作为系统时钟输出(已输出),SYSCLK=PCLK=PCLK1=PCLK2=8M,ADCCLK=1/2(PCLK2)=4M
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;//同上;RCC->CFGR的27位为保留位始终为0 ,HSI作为系统时钟输出(未输出原因为未编译)
#endif


RCC->CR &= (uint32_t)0xFEF6FFFF;//时钟监测器关闭,HSE振荡器关闭


RCC->CR &= (uint32_t)0xFFFBFFFF;//外部4-25MHz振荡器没有旁路


RCC->CFGR &= (uint32_t)0xFF80FFFF; //PLL时钟1.5倍分频作为USB时钟,PLL 2倍频输出,HSE不分频,HSI时钟2分频后作为PLL输入时钟
//PLLCLK=HSICLK=8M(还未输出),HSECLK=HSEOSC,USBCLK=PLLCLK/1.5 ,除PLL外其他分频系数都为0
#ifdef STM32F10X_CL

RCC->CR &= (uint32_t)0xEBFFFFFF;//CR中的26和28位置0


RCC->CIR = 0x00FF0000;//清除中断标志,关闭一些中断


RCC->CFGR2 = 0x00000000; //没有此寄存器
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (definedSTM32F10X_HD_VL)

RCC->CIR = 0x009F0000;//清除中断标志,关闭一些中断


RCC->CFGR2 = 0x00000000; //没有此寄存器
#else

RCC->CIR = 0x009F0000; //清除中断标志,关闭一些中断
#endif

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top