- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)