《第七章复位和系统时钟.docx》由会员分享,可在线阅读,更多相关《第七章复位和系统时钟.docx(11页珍藏版)》请在优知文库上搜索。
1、FCLK是Cortex-M3的自由运行时钟.7.2.1 HSE时钟(外部高速时钟)高速外部时钟信号(HSE)由以下两种时钟源产生:HSE外部晶体/陶瓷谐振器HSE用户外部时钟为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振外部时钟源(HSE旁路)在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEoN位来选择这一模式。外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SoCN管脚,同时保证OSCLoUT管脚悬空。见图7-2-2。外部晶体/陶瓷谐振器(HSE晶体)4l6Mz外部振荡器可为
2、系统提供更为精确的主时钟。相关的硬件配置可参考图7-2-2.在时钟控制寄存器RCC-CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置时钟才被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。HSE晶体可以通过设置时钟控制寄存器里RCC-CR中的HSEON位被启动和关闭。7.2.2 HSl时钟HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。HSIRC振荡器能够在不需要任何外部器件的条件下提供系统时钟。它的启动时间比HSE晶体振荡器短。然而,即使在校准之后它的时钟频率精度仍较差。校准:制造工艺
3、决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSl时钟频率在出厂前已经被ST校准到1%(25。C)的原因。系统复位时,工厂校准值被装载到时钟控制寄存器的HSlCAL7:0位。如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。你可以通过利用在时钟控制寄存器里的HSrrRlMl4:0位来调整HSI频率。时钟控制寄存器中的HSIRDY位用来指示HSlRC振荡器是否稳定。在时钟启动过程中,直到这一位被硬件置1,HSlRC输出时钟才被释放。HSIRC可由时钟控制寄存器中的HSlON位来启动和关闭。如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。7.2.3 PLL
4、内部PLL可以用来倍频HSlRC的输出时钟或HSE晶体输出时钟。参考图72-1时钟树和时钟控制寄存器。PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHZ的USBCLK时钟。7.2.4LSE时钟LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。LSE晶体通过在备份域
5、控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。在启动阶段,直到这个位被硬件置T后,LSE时钟信号才被释放出来。如果在时钟中断寄存器里被允许,可产生中断申请。外部时钟源(LSE旁路)在这个模式里必须提供一个32.768kHz频率的外部时钟源。你可以通过设置在备份域控制寄存器(RCJBDCR)里的LSEBYP和LSEoN位来选择这个模式。具有50%占空比的外部时钟信号(方波、正弦波或三角波)必须连到OSC32JN管脚,同时保证OSC32_OUT管脚悬空。见图7-2-1。7.2.5 LSl时钟LSlRC担当
6、一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。LSl时钟频率大约40kHz(在30kHz和60kHz之间)。进一步信息请参考数据手册中有关电气特性部分。LSIRC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。在控制/状态寄存器(RCCLCSR)里的LSIRDY位指示低速内部振荡器是否稳定。在启动阶段,直到这个位被硬件设置为T后,此时钟才被释放。如果在时钟中断寄存器(RCC_CIR)里被允许,将产生LSl中断中请。注意:只有大容量产品可以进行LS胶准LSI校准:可以通过校准内部低速振荡器LSl来补偿其频率偏移,从而获得精度
7、可接受的RTC时间基数,以及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)。校准可以通过使用TlM5的输入时钟CnM5JDLK)测量LSl时钟频率实现。测量以HSE的精度为保证,软件可以通过调整RTC的20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精确的独立看门狗(IWDG)的超时时间。LSl校准步骤如下:1. 打开TlM5,设置通道4为输入捕获模式;2. 设置AFleLMAPR的TlM5_CH4_IREMAP位为1,在内部把LSl连接到TlM5的通道4;3. 通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率;4. 根据测量结果和期望的RTC时间基数和独立
8、看门狗的超时时间,设置20位预分频器。7.2.6 系统时钟(SYSCLK)选择系统复位后,HSl振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。在时钟控制寄存器(RCCLCR)里的状态位指示哪个时钟己经准备好了,哪个时钟目前被用作系统时钟。7.2.7 时钟安全系统(CSS)时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE
9、时钟关闭后关闭。如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器TlMl的刹车输入端,并产生时钟安全中断CSSL允许软件完成营救操作。此CSSl中断连接到CorteXTM-M3的NMl中断。注意:一旦CSS被激活,并且HSE时钟出现故障,CSSIl断就产生,并且MV也自动产生。NM胳被不断执行,直到CSS中断挂起位被清除。因此,在MVf/的处理程序中必须通过设置时钟中断寄存器但CCLC/可里的CSSC位来清除CSS中断。如果HSE振荡器被直间或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换
10、到HSl振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。7.2.8 RTC时钟通过设置备份域控制寄存器(RCjBDCR)里的RTCSEL1:0位,RTCCLK时钟源可以由HSE/128、LSE或LSl时钟提供。除非备份域复位,此选择不能被改变。LSE时钟在备份域里,但HSE和LSl时钟不是。因此:如果LSE被选为RTC时钟:只要VBAT维持供电,尽管VDD供电被切断,RTe仍继续工作。如果LSl被选为自动唤醒单元(AWU)时钟:详见7.2.5节LSl时钟。如果VDD供电被切断,AWU状态不能被保证。如
11、果HSE时钟128分频后作为RTC时钟:如果VDD供电被切断或内部电压调压器被关闭(1.8V域的供电被切断),则RTC状态不确定。7.2.9 看门狗时钟如果独立看门狗已经由硬件选项或软件启动,LSl振荡器将被强制在打开状态,并且不能被关闭。在LSl振荡器稳定后,时钟供应给IWDG。7.2.10 时钟输出微控制器允许输出时钟信号到外部MCo管脚。相应的GPIO端口寄存器必须被配置为相应功能。以下四个时钟信号可被选作MCo时钟:SYSCLKHSIHSE除2的PLL时钟被调用函数无表7417RCC_PCLK2值RCC_PCLK2描述RCC_HCLK_Div1APB2时钟=HCLKRCC_HCLK_D
12、iv2APB2时钟=HCLK/2RCC_HCLK_Div4APB2时钟=HCLK/4RCC_HCLK_Div8APB2时钟=HCLK/8RCC_HCLK_Div16APB2时钟=HCLK/16例:/*设定PCLK2=HCLK*/RCC_PCLK2Config(RCC_HCLK_Divl);7.4.11 函数RCJUSBCLKCOnfig表7-4-18描述了函数RCCJJSBCLKeonfig函数名RCC_USBCLKConfig函数原形voidRCC_USBCLKConfig(u32RCC_USBCLKSource)功能描述设置USB时钟(USBCLK)输入参数HCLK)RCC_USBCLKS
13、ource:定义USBCLK,该时钟源自PLL输出输出参数无返回值无先决条件无被调用函数无RCC_USBCLKSource:该参数设置了USB时钟(USBCLK),表7419给出了该参数可取的值表7-4-19RCCJjSBCLKSource值RCC_USBCLKSource描述RCC_USBCLKSource_PLLCLK_1Div5USB时钟=PLL时钟除以1.5RCC_USBCLKSource_PLLCLK_Div1USB时钟=PLL时钟例:*PLL时钟除以1.5作为USB时钟源*/RCjUSBCLKConfig(RCC_USBCLKSource_PLLCLK_lDiv5);7.4.12
14、函数RCC_ADCCLKConfig表7-4-20描述了函数RCC_ADCCLKConfig函数名RCC_ADCCLKConfig函数原形voidADC_ADCCLKConfig(u32RCC_ADCCLKSource)功能描述设置ADC时钟(ADCCLK)输入参数RCC,ADCCLKSource:定义ADCCLK,该时钟源自APB2时钟(PCLK2)输出参数无返回值无先决条件无被调用函数无RCC_ADCCLKSource:该参数设置了ADC时钟(ADCCLK),表7-4-21给出了该参数可取的值。表7-421RCC-ADCCLKSource值RCC_ADCCLKSource描述RCC_PCL
15、K2_Div2ADC时钟=PCLK/2RCC_PCLK2_Div4ADe时钟=PCLK/4RCC_PCLK2_Div6ADC时钟=PCLK/6RCC_PCLK2_Div8ADC时钟=PCLK/8例:/*设置ADC时钟为APB2时钟的1/2*/RCC.ADCCLKConfig(RCC_PCLK2_Div2);7.4.13 函数RCC_LSEConfig表7-4-22描述了函数ReJLSEeonfig函数名RCC_LSEConfig函数原形voidRCC_LSEConfig(u32RCC_HSE)功能描述设置外部低速晶振(LSE输入参数RCC_LSE:LSE的新状态输出参数无返回值无先决条件无被调用函数无RCC_LSE:该参数设置了HSE的状态(见表7-4-23.)。表7-4-23RCC_LSE定义RCC_LSE描述RCC_LSE_OFFLSE晶振OFFRCC_LSE_ONLSE晶振ONRCC_LSE_BypassLSE晶振被外部时钟旁路例:/*使能外部低速晶振LSE/R