欢迎来到天天文库
浏览记录
ID:38282242
大小:16.82 KB
页数:5页
时间:2019-06-07
《STM32时钟初始化函数SysInit详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出):使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz函数调用顺序:startup_stm32f10x_cl.s(启动文件)→SystemInit()→ SetSysClock()→SetSysClockTo72()初始化时钟用到的RCC寄存器复位值:RCC_CR=0x0000xx83;RCC_CFGR=0x00000000;RCC_CI
2、R=0x00000000;RCC_CFGR2=0x00000000;SystemInit()在调用SetSysClock()之前RCC寄存器的值如下(都是一些与运算,或运算,在此就不赘述了):RCC->CR=0x00000083; RCC->CIR=0x00FF0000;RCC->CFGR2=0x00000000;至于这些寄存器都代表着什么意思,详见芯片资料RCC寄存器,该文重点不在此处;SetSysClock()函数如下:staticvoidSetSysClock(void){#ifdefSYSCLK_FREQ_HSE SetSysClockToHSE();
3、#elifdefinedSYSCLK_FREQ_24MHz SetSysClockTo24();#elifdefinedSYSCLK_FREQ_36MHz SetSysClockTo36();#elifdefinedSYSCLK_FREQ_48MHz SetSysClockTo48();#elifdefinedSYSCLK_FREQ_56MHz SetSysClockTo56(); #elifdefinedSYSCLK_FREQ_72MHz//我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSysClockTo72() SetSysClo
4、ckTo72();#endif}SetSysClockTo72()函数如下:staticvoidSetSysClockTo72(void){ __IOuint32_tStartUpCounter=0,HSEStatus=0; /*SYSCLK,HCLK,PCLK2andPCLK1configuration---------------------------*/ /*EnableHSE*/ RCC->CR
5、=((uint32_t)RCC_CR_HSEON); /*WaittillHSEisreadyandifTimeoutisreachede
6、xit*/ do { HSEStatus=RCC->CR&RCC_CR_HSERDY; StartUpCounter++; }while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT)); if((RCC->CR&RCC_CR_HSERDY)!=RESET) { HSEStatus=(uint32_t)0x01; } else { HSEStatus=(uint32_t)0x00; } if(HSEStatus==(uint32_t)0x01) { /*Enable
7、PrefetchBuffer*/ FLASH->ACR
8、=FLASH_ACR_PRFTBE; /*Flash2waitstate*/ FLASH->ACR&=(uint32_t)((uint32_t)~FLASH_ACR_LATENCY); FLASH->ACR
9、=(uint32_t)FLASH_ACR_LATENCY_2; /*HCLK=SYSCLK*/ RCC->CFGR
10、=(uint32_t)RCC_CFGR_HPRE_DIV1; /*PCLK2=HCLK*/ RCC->CFGR
11、=(uint32_t)RCC_CFGR_PPRE
12、2_DIV1; /*PCLK1=HCLK*/ RCC->CFGR
13、=(uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdefSTM32F10X_CL /*ConfigurePLLs------------------------------------------------------*/ /*PLL2configuration:PLL2CLK=(HSE/5)*8=40MHz*/ /*PREDIV1configuration:PREDIV1CLK=PLL2/5=8MHz*/ RCC->CFGR2&=(uint32_t)~(RCC
14、_CFGR
此文档下载收益归作者所有