STM32时钟初始化函数SysInit详解.docxVIP

  • 95
  • 0
  • 约5.06千字
  • 约 5页
  • 2017-01-07 发布于江苏
  • 举报
STM32时钟初始化函数SysInit详解

花了一天的时间,总算是了解了SystemInit()函数实现了哪些功能,初学STM32,,现记录如下(有理解错误的地方还请大侠指出):使用的是3.5的库,用的是STM32F107VC,开发环境RVMDK4.23我已经定义了STM32F10X_CL,SYSCLK_FREQ_72MHz函数调用顺序:startup_stm32f10x_cl.s(启动文件) → SystemInit() →?SetSysClock () → SetSysClockTo72()初始化时钟用到的RCC寄存器复位值:RCC_CR = 0x0000 xx83; RCC_CFGR = 0x0000 0000;RCC_CIR = 0x0000 0000; RCC_CFGR2 = 0x0000 0000;SystemInit()在调用 SetSysClock()之前RCC寄存器的值如下(都是一些与运算,或运算,在此就不赘述了):RCC-CR = 0x0000 0083;??RCC-CIR = 0x00FF0000; RCC-CFGR2 = 0至于这些寄存器都代表着什么意思,详见/?u=999芯片资料RCC寄存器,该文重点不在此处;SetSysClock()函数如下:static void SetSysClock(void){#ifdef SYSCLK_FREQ_HSE?SetSysClockToHSE();#elif defined SYSCLK_FREQ_24MHz?SetSysClockTo24();#elif defined SYSCLK_FREQ_36MHz?SetSysClockTo36();#elif defined SYSCLK_FREQ_48MHz?SetSysClockTo48();#elif defined SYSCLK_FREQ_56MHz?SetSysClockTo56();??#elif defined SYSCLK_FREQ_72MHz//我的定义的是SYSCLK_FREQ_72MHz,所以调用SetSysClockTo72()?SetSysClockTo72();#endif}SetSysClockTo72()函数如下:static void SetSysClockTo72(void){?__IO uint32_t StartUpCounter = 0, HSEStatus = 0;?/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/??/* Enable HSE */??RCC-CR |= ((uint32_t)RCC_CR_HSEON);?/* Wait till HSE is ready and if Time out is reached exit */?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 Prefetch Buffer */ FLASH-ACR |= FLASH_ACR_PRFTBE; /* Flash 2 wait state */ FLASH-ACR = (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); FLASH-ACR |= (uint32_t)FLASH_ACR_LATENCY_2;? /* HCLK = SYSCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;? /* PCLK2 = HCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;?? /* PCLK1 = HCLK */ RCC-CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;#ifdef STM32F10X_CL /* Configure PLLs ------------------------------------------------------*/ /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40

文档评论(0)

1亿VIP精品文档

相关文档