打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32再学习——时钟初始化

  STM32F系列微处理器,或者说是Cortex-M3内核的MCU内,都集成了一个叫PLL的东西。PLL就是锁相回路或锁相环(Phase Locked Loop),用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术,将外部的输入信号与内部的振荡信号同步,锁相环路的基本方框图如下图所示。一句话,PLL用来控制STM32F时钟频率的。总而言之,STM32F系列MCU使用了这个东西,而我们在MCU上电之后,也就要对其正确的初始化,这样,我们才能得到我们需要的时钟配置。

本文引用地址:http://www.eepw.com.cn/article/182408.htm

  在ST公司的外设固件库的示例里,对于工程项目文件,ST并没有在启动函数main()里初始化PLL,因为其已经在硬件初始化阶段完成对系统时钟的配置。这样也就带了一个问题,ST库里的均使用了外设8MHz的晶振,而我们平时的项目就一定采用的是这个频率,实际配置的低于8MHz,MCU不能全速运行,高于8MHz,外设时钟即配置失败,甚至无法运行。那么如何重新配置时钟就需要我们一线的工程师们重新设计了。

  ST库里的硬件初始化阶段的代码是用寄存器方式编写的,不利于我们阅读与参考。也正是出于这个原因,小编使用库函数重新编写了STM32F系统时钟PLL初始化过程,与大家分享,期待共同提高与进步。

  /*********************************************************************************************************

  ** Function name: static void SysClockInit(void)

  ** Descriptions: 配置SYSCLK, HCLK, PCLK2与PCLK1

  ** Created by: Jobs Zheng

  ** Created Date: 2013-03-06 09:35

  *********************************************************************************************************/

  static void SysClockInit(void)

  {

  RCC_DeInit();/* RCC重置 */

  RCC_HSEConfig(RCC_HSE_ON); /*(使能HSE)*/

  HSEStartUpStatus = RCC_WaitForHSEStartUp();/*(等待HSE使能结束)*/

  if (HSEStartUpStatus == SUCCESS)

  {

  FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  FLASH_SetLatency(FLASH_Latency_2);

  RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 配置HCLK = SYSCLK */

  RCC_PCLK2Config(RCC_HCLK_Div1); /* 配置PCLK2 = HCLK */

  RCC_PCLK1Config(RCC_HCLK_Div2); /* 配置PCLK1 = HCLK/2 */

  /* 超级重要的、需要配置的地方在这里 */

  /* PLLCLK = 8MHz * 9 = 72 MHz */

  RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* RCC_PLLSource_HSE_Div1为外置晶振的分频系数;RCC_PLLMul_9为倍频数 */

  RCC_PLLCmd(ENABLE);

  while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

  {

  }

  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 选定PLL为系统主时钟 */

  while(RCC_GetSYSCLKSource() != 0x08)

  {

  }

  }

  else

  { /* 配置失败将程序停留在这里 */

  while (1)

  {

  }

  }

  }

  上述C语言的文件仍需要#include "stm32f10x.h"的头文件来调用ST固件库。

  就像ST官方说明文档所说,STM32F系列MCU支持4M-16MHz的外置晶振,因此,大家在没有官方默认的8Mhz晶振下,大可不必苦恼,只需要添加上面的这个初始化函数,你就可以任意使用外置晶振了。

  祝大家工作顺利,编程快乐 ^_^

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
STM32 时钟系统http://blog.chinaunix.net/uid-24219701-id-4081961.html
STM32固件库V3
STM32时钟控制RCC探究(转) - 奋斗
【原创】STM32时钟控制RCC探究 来自 wolaiye945的博客-与非网博客
解析STM32的时钟树RCC
【STM32】系统时钟RCC详解(超详细,超全面)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服