stm32学习之系统时钟.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stm32学习之系统时钟

stm32学习之系统时钟 STM32入门学习心得 ? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???—系统时钟 ? ?? ???STM32的时钟与单片机相比要复杂的多,它能够对每一个外设以及IO口进行时钟的设置,这是单片机是无法和它比拟的,所以正确的理解和灵活的运用stm32的时钟是很重要的。 ? ?? ???STM32有3个不同的时钟源可以用于驱动系统时钟(SYSCLK),分别为: HSI振荡器时钟(内部高速时钟)。 HSE振荡器时钟(外部高速时钟)。 PLL时钟。 ? ?STM32还有两个二级时钟用来驱动独立的看门狗和选择性的驱动RTC。分别为: 32KHZ低速内部RC振荡器(LSI RC)用来驱动独立的开门狗和选择性的驱动用于从停止/待机模式自动唤醒的RTC。 32.768kHz低速外部晶体振荡器(LSE 晶体振荡器)用来选择性的驱动实时时钟。 注:每个时钟源在使用时都可以独立的打开/关掉,以节省功耗。 在这里我们可以通过框图来直观的理解STM32的系统时钟。系统时钟框图如图1所示。 图一 系统框图 下载 (61.81 KB) 2010-10-18 13:24 ? ? 通过图一不妨来详细分析下系统各个部分的时钟。 HSI时钟 ? ?? ???HSI时钟通过一个8MHz的内部RC振荡器产生,并且可以被直接用作系统时钟,或者经过2倍频后作为PLL的输出作为SYSCLKS时钟。在系统复位时,HSI振荡器被选择默认的系统SYSCLKS时钟。内部时钟的缺点是频率的精确度没有外部晶体振荡器的高。 程序实现(所有程序都是基于固件库): ? ?? ???直接作为SYSCLKS时钟:RCC_DeInit();系统默认 ? ?? ???经过PLL输出作为SYSCLKS时钟: ? ? RCC_DeInit(); ? ? SystemInit (); ? ?? ???可以在固件库中的stm32f10x_rcc.c文件中通过开放宏定义来选择系统时钟经过倍频后的频率,固件库默认为72MHZ。如图2所示: ? ?? ??? 如图2所示 HSE时钟 高速外部时钟信号可以通过2个可能的时钟源产生。分别为: HSE 外部晶体/陶瓷共振器。 HSE 外部时钟。 外部时钟源 ? ???在该种模式下,必须提高外部时钟源,外部时钟源可以达到25MHz,用户可以通过设置时钟控制寄存器(RCC_CR)中的HSEBYP和HSEON 位选择该模式。占空必50%的外部时钟信号(方波,正弦波,三角波)必须用来驱动OSC_IN引脚,同时OSC_OUT引脚置于高阻态。 外部晶体振荡器/陶瓷共振器(HSE晶体) ? ?? ???4~16MHz的外部振荡器具有能够在主时钟上产生一个非常精确地速率的优点。 时钟控制寄存器(RCC_CR)中的HSERDY标志指示了高速外部振荡器是否是稳定的,在启动时,时钟直到硬件设置了该标志位才释放,如果在时钟中断寄存器(RCC_CR)中打开了,就会产生一个中断。 ? ?? ???HSE晶体振荡器可以通过时钟控制寄存器(RCC_CR)中的HSEON位来打开或禁止。 程序实现(所有程序都是基于固件库): ? ?? ???1.直接作为SYSCLKS时钟: ? ?? ?? ?RCC_DeInit(); ? ?? ???/*************************外部时钟设置*****************************/ ? ?? ?? ?RCC_HSEConfig(RCC_HSE_ON);使能外部时钟 ? ?? ?? ?If(RCC_WaitForHSEStartUp()==SUCCESS){ ? ? /**********************FLASH设置*********************************/ ? ? FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); ? ? FLASH_SetLatency(FLASH_Latency_2);//flash读取缓冲,加速 ??/**********************系统时钟配置*********************************/? ?RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将PLL设置为系统时钟源 ? ?while (RCC_GetSYSCLKSource() != 0x08); //等待系统时钟源的启动 ? ?/**********************AHB设置*******************

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档