,调用__main函数之前先调用了SystemInit()初始化函数,其中系统时钟SYSCLK设置:时钟源、倍频、分频等控制参数。SystemInit(),.c中。使用外设时,配置初始化后,必须也要开启外设时钟。()先将配置时钟相关的寄存器都复位为默认值,再调用SetSysClock()选择使用频率,而具体设置是通过宏定义设置的。函数调用顺序:启动文件→SystemInit()→ SetSysClock ()→ SetSysClockTo72()。1、SystemInit()STM32时钟系统的SystemInit()中设置:SYSCLK(系统时钟)=72MHzAHB总线时钟(使用SYSCLK)=72MHzAPB1总线时钟(PCLK1)=36MHzAPB2总线时钟(PCLK2)=72MHzPLL时钟=寄存器复位值:RCC_CR=0x0000xx83;RCC_CFGR=0x00000000;RCC_CIR=0x00000000;RCC_CFGR2=0x00000000;……。{ __IOuint32_tCR; __IOuint32_tCFGR; __IOuint32_tCIR; __IOuint32_tAPB2RSTR; __IOuint32_tAPB1RSTR; __IOuint32_tAHBENR; __IOuint32_tAPB2ENR; __IOuint32_tAPB1ENR; __IOuint32_tBDCR; __IOuint32_tCSR;#ifdefSTM32F10X_CL __IOuint32_tAHBRSTR; __IOuint32_tCFGR2;#endif/*STM32F10X_CL*/#ifdefined(STM32F10X_LD_VL)||defined(STM32F10X_MD_VL)||defined(STM32F10X_HD_VL) uint32_tRESERVED0; __IOuint32_tCFGR2;#endif/*STM32F10X_LD_VL||STM32F10X_MD_VL||STM32F10X_HD_VL*/}RCC_TypeDef;:#define __IO volatile;volatile,易变的,用变量时需到原地址重新存取。。typedefunsignedintuint32_t;寄存器组所有32位寄存器的地址,0x04正好是地址偏移量,所以把连续的寄存器组定义为结构。2、SetSysClock()函数如下此函数中选择调用确定使用频率的函数。staticvoidSetSysClock(void){#ifdefSYSCLK_FREQ_HSE SetSysClockToHSE();#elifdefinedSYSCLK_FREQ_24MHz SetSysClockTo24();#elifdefinedSYSCLK_FREQ_36MHz SetSysClockTo36();#elifdefinedSYSCLK_FREQ_48MHz SetSysClockTo48();#elifdefinedSYSCLK_FREQ_56MHz SetSysClockTo56(); #elifdefinedSYSCLK_FREQ_72MHz//使用此项 SetSysClockTo72();#endif}3、SetSysClockTo72()函数各个SetSysClockToXX(void)函数,配置了具体的系统时钟,PLL倍频以及分频系数。采用寄存器直接配置方式,如:staticvoidSetSysClockTo72(void){__IOuint32_tStartUpCounter=0,HSEStatus=0;/*SYSCLK,HCLK,PCLK2andPCLK1configuration*//*EnableHSE*/RCC->CR|=((uint32_t)RCC_CR_HSEON);do{HSEStatus=
第8章 STM32时钟与GPIO设计 来自淘豆网www.taodocs.com转载请标明出处.