第七章复位和系统时钟Word文件下载.docx

上传人:b****6 文档编号:18368165 上传时间:2022-12-15 格式:DOCX 页数:29 大小:150.02KB
下载 相关 举报
第七章复位和系统时钟Word文件下载.docx_第1页
第1页 / 共29页
第七章复位和系统时钟Word文件下载.docx_第2页
第2页 / 共29页
第七章复位和系统时钟Word文件下载.docx_第3页
第3页 / 共29页
第七章复位和系统时钟Word文件下载.docx_第4页
第4页 / 共29页
第七章复位和系统时钟Word文件下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

第七章复位和系统时钟Word文件下载.docx

《第七章复位和系统时钟Word文件下载.docx》由会员分享,可在线阅读,更多相关《第七章复位和系统时钟Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。

第七章复位和系统时钟Word文件下载.docx

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

HSI振荡器时钟

HSE振荡器时钟

PLL时钟

这些设备有以下2种二级时钟源:

1.40kHz低速内部RC,可以用于驱动独立看门狗和通过程序选择驱动RTC。

RTC用于从停机/待机模式下自动唤醒系统。

2.32.768kHz低速外部晶体也可用来通过程序选择驱动RTC(RTCCLK)。

当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。

图7-2-1是系统的时钟树。

图7-2-1时钟树

当HSI被用于作为PLL时钟的输入时,系统时钟的最大频率不得超过64MHz。

用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。

AHB和APB2域的最大频率是72MHZ。

APB1域的最大允许频率是36MHZ。

SDIO接口的时钟频率固定为HCLK/2。

RCC通过AHB时钟8分频后供给Cortex系统定时器的(SysTick)外部时钟。

通过对SysTick控制与状态寄存器的设置,可选择上述时钟或CortexAHB时钟作为SysTick时钟。

ADC时钟由高速APB2时钟经2、4、6或8分频后获得。

定时器时钟频率分配由硬件按以下2种情况自动设置:

1.如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。

2.否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

FCLK是Cortex™-M3的自由运行时钟。

7.2.1HSE时钟(外部高速时钟)

高速外部时钟信号(HSE)由以下两种时钟源产生:

HSE外部晶体/陶瓷谐振器

HSE用户外部时钟

为了减少时钟输出的失真和缩短启动稳定时间,晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器管脚。

负载电容值必须根据所选择的振荡器来调整。

图7-2-2HSE/LSE时钟源

硬件配置

外部时钟

晶体

陶瓷谐振器

图7-2-2时钟电路

外部时钟源(HSE旁路)

在这个模式里,必须提供外部时钟。

它的频率最高可达25MHz。

用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。

外部时钟信号(50%占空比的方波、正弦波或三角波)必须连到SOC_IN管脚,同时保证OSC_OUT管脚悬空。

见图7-2-2。

外部晶体/陶瓷谐振器(HSE晶体)

4~16Mz外部振荡器可为系统提供更为精确的主时钟。

相关的硬件配置可参考图7-2-2。

在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。

在启动时,直到这一位被硬件置’1’,时钟才被释放出来。

如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。

HSE晶体可以通过设置时钟控制寄存器里RCC_CR中的HSEON位被启动和关闭。

7.2.2HSI时钟

HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。

HSIRC振荡器能够在不需要任何外部器件的条件下提供系统时钟。

它的启动时间比HSE晶体振荡器短。

然而,即使在校准之后它的时钟频率精度仍较差。

校准:

制造工艺决定了不同芯片的RC振荡器频率会不同,这就是为什么每个芯片的HSI时钟频率在出厂前已经被ST校准到1%(25°

C)的原因。

系统复位时,工厂校准值被装载到时钟控制寄存器的HSICAL[7:

0]位。

如果用户的应用基于不同的电压或环境温度,这将会影响RC振荡器的精度。

你可以通过利用在时钟控制寄存器里的HSITRIM[4:

0]位来调整HSI频率。

时钟控制寄存器中的HSIRDY位用来指示HSIRC振荡器是否稳定。

在时钟启动过程中,直到这一位被硬件置’1’,HSIRC输出时钟才被释放。

HSIRC可由时钟控制寄存器中的HSION位来启动和关闭。

如果HSE晶体振荡器失效,HSI时钟会被作为备用时钟源。

7.2.3PLL

内部PLL可以用来倍频HSIRC的输出时钟或HSE晶体输出时钟。

参考图7-2-1时钟树和时钟控制寄存器。

PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。

一旦PLL被激活,这些参数就不能被改动。

如果PLL中断在时钟中断寄存器里被允许,当PLL准备就绪时,可产生中断申请。

如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。

7.2.4LSE时钟

LSE晶体是一个32.768kHz的低速外部晶体或陶瓷谐振器。

它为实时时钟或者其他定时功能提供一个低功耗且精确的时钟源。

LSE晶体通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。

在备份域控制寄存器(RCC_BDCR)里的LSERDY指示LSE晶体振荡是否稳定。

在启动阶段,直到这个位被硬件置’1’后,LSE时钟信号才被释放出来。

如果在时钟中断寄存器里被允许,可产生中断申请。

外部时钟源(LSE旁路)

在这个模式里必须提供一个32.768kHz频率的外部时钟源。

你可以通过设置在备份域控制寄存器(RCC_BDCR)里的LSEBYP和LSEON位来选择这个模式。

具有50%占空比的外部时钟信号(方波、正弦波或三角波)必须连到OSC32_IN管脚,同时保证OSC32_OUT管脚悬空。

见图7-2-1。

7.2.5LSI时钟

LSIRC担当一个低功耗时钟源的角色,它可以在停机和待机模式下保持运行,为独立看门狗和自动唤醒单元提供时钟。

LSI时钟频率大约40kHz(在30kHz和60kHz之间)。

进一步信息请参考数据手册中有关电气特性部分。

LSIRC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。

在控制/状态寄存器(RCC_CSR)里的LSIRDY位指示低速内部振荡器是否稳定。

在启动阶段,直到这个位被硬件设置为’1’后,此时钟才被释放。

如果在时钟中断寄存器(RCC_CIR)里被允许,将产生LSI中断申请。

注意:

只有大容量产品可以进行LSI校准

LSI校准:

可以通过校准内部低速振荡器LSI来补偿其频率偏移,从而获得精度可接受的RTC时间基数,以及独立看门狗(IWDG)的超时时间(当这些外设以LSI为时钟源)。

校准可以通过使用TIM5的输入时钟(TIM5_CLK)测量LSI时钟频率实现。

测量以HSE的精度为保证,软件可以通过调整RTC的20位预分频器来获得精确的RTC时钟基数,以及通过计算得到精确的独立看门狗(IWDG)的超时时间。

LSI校准步骤如下:

1.打开TIM5,设置通道4为输入捕获模式;

2.设置AFIO_MAPR的TIM5_CH4_IREMAP位为’1’,在内部把LSI连接到TIM5的通道4;

3.通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率;

4.根据测量结果和期望的RTC时间基数和独立看门狗的超时时间,设置20位预分频器。

7.2.6系统时钟(SYSCLK)选择

系统复位后,HSI振荡器被选为系统时钟。

当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。

只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。

在被选择时钟源没有就绪时,系统时钟的切换不会发生。

直至目标时钟源就绪,才发生切换。

在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

7.2.7时钟安全系统(CSS)

时钟安全系统可以通过软件被激活。

一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。

如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟失效事件将被送到高级定时器TIM1的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。

此CSSI中断连接到Cortex™-M3的NMI中断。

一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。

NMI将被不断执行,直到CSS中断挂起位被清除。

因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。

如果HSE振荡器被直间或间接地作为系统时钟,(间接的意思是:

它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。

在时钟失效时,如果HSE振荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。

7.2.8RTC时钟

通过设置备份域控制寄存器(RCC_BDCR)里的RTCSEL[1:

0]位,RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。

除非备份域复位,此选择不能被改变。

LSE时钟在备份域里,但HSE和LSI时钟不是。

因此:

如果LSE被选为RTC时钟:

只要VBAT维持供电,尽管VDD供电被切断,RTC仍继续工作。

如果LSI被选为自动唤醒单元(AWU)时钟:

详见7.2.5节LSI时钟。

如果VDD供电被切断,AWU状态不能被保证。

如果HSE时钟128分频后作为RTC时钟:

如果VDD供电被切断或内部电压调压器被关闭(1.8V域的供电被切断),则RTC状态不确定。

7.2.9看门狗时钟

如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。

在LSI振荡器稳定后,时钟供应给IWDG。

7.2.10时钟输出

微控制器允许输出时钟信号到外部MCO管脚。

相应的GPIO端口寄存器必须被配置为相应功能。

以下四个时钟信号可被选作MCO时钟:

SYSCLK

HSI

HSE

除2的PLL时钟

7.3外设时钟

STM32系列的芯片,所有外设的时钟都可以独立的打开和关闭,这样可以只把使用的那部分外设时钟打开,这样的好处是,可以降低系统的能耗,满足低功耗的要求。

下面是各个具体外设的时钟情况:

1》USB时钟:

USB时钟来源于PLLCLK,通过USB分频器为USB外设提供48MHz时钟。

由于USB时钟分频器只能1分频(即不分频)和1.5分频,所以PLL出来的时钟频率只能是48MHz和72MHz。

当需要使用USB时,PLLCLK时钟只能设定为48MHz和72MHz。

2》独立看门狗时钟:

独立看门狗时钟来源于内部的低速RC时钟,可以提供30KHz—60KHz之间,标准时40KHz的时钟。

当独立看门狗打开时,这个时钟被强制打开,并且不会被关闭。

3》I2S时钟:

I2S时钟直接来源于系统时钟,通过使能控制位来控制该外设时钟。

4》AHB时钟:

AHB时钟为其他外设时钟提供时钟源。

AHB时钟通过系统时钟1,2……512分频而来,最高为72MHz。

5》DMA时钟:

DMA时钟来源于AHB,最高可以到72MHz。

6》APB2高速时钟:

APB2时钟来源于AHB时钟1,2,4,8,16分频,最高可以到72MHz。

连接在APB2时钟上的是系统的高速外设,有TIME1、TIME8、SPI1、USART1、ADC1、ADC2、ADC3和所有I/O口等这些外设。

这些外设时钟都可以单独打开和关闭。

7》APB1低速时钟:

APB1时钟来源于AHB时钟1,2,4,8,16分频,最高可达36MHz。

连接在APB1时钟上的是系统的低速外设,有TIME2—TIME7、窗口看门狗、USART2—USART5、SPI2、SPI3、CAN、I2C1、I2C2、BKP后备域、电源控制和DAC时钟。

这些外设可以单独打开和关闭。

7.4RCC库函数

7.4.1函数RCC_DeInit

表7-4-1.描述了函数RCC_DeInit

表7-4-1.RCC_DeInit

函数名

RCC_DeInit

函数原形

voidRCC_DeInit(void)

功能描述

将外设RCC寄存器重设为缺省值

输入参数

输出参数

返回值

先决条件

被调用函数

1.该函数不改动寄存器RCC_CR的HSITRIM[4:

2.该函数不重置寄存器RCC_BDCR和寄存器RCC_CSR。

例:

设置RCC寄存器为初始状态

RCC_DeInit();

7.4.2函数RCC_HSEConfig

表7-4-2.描述了函数RCC_HSEConfig

RCC_HSEConfig

voidRCC_HSEConfig(u32RCC_HSE)

设置外部高速晶振(HSE)

RCC_HSE:

HSE的新状态

如果HSE被直接或者通过PLL用于系统时钟,那么它不能被停振

RCC_HSE

该参数设置了HSE的状态(见表7-4-3.)。

表7-4-3RCC_HSE定义

RCC_HSE

描述

RCC_HSE_OFF

HSE晶振OFF

RCC_HSE_ON

HSE晶振ON

RCC_HSE_Bypass

HSE晶振被外部时钟旁路

使能HSE

RCC_HSEConfig(RCC_HSE_ON);

7.4.3函数RCC_WaitForHSEStartUp

表7-4-4.描述了函数RCC_WaitForHSEStartUp

RCC_WaitForHSEStartUp

ErrorStatusRCC_WaitForHSEStartUp(void)

等待HSE起振该函数将等待直到HSE就绪,或者在超时的情况下退出

一个ErrorStatus枚举值:

SUCCESS:

HSE晶振稳定且就绪

ERROR:

HSE晶振未就绪

ErrorStatusHSEStartUpStatus;

/*使能HSE*/

/*等待直到HSE起振或超时退出*/

HSEStartUpStatus=RCC_WaitForHSEStartUp();

if(HSEStartUpStatus==SUCCESS)

{

/*在此处加入PLL和系统时钟的定义*/

}

else

/*在此处加入超时错误处理*/

7.4.4函数RCC_PLLConfig

表7-4-5.描述了函数RCC_PLLConfig

RCC_PLLConfig

voidRCC_PLLConfig(u32RCC_PLLSource,u32RCC_PLLMul)

设置PLL时钟源及倍频系数

输入参数1

RCC_PLLSource:

PLL的输入时钟源

输入参数2

RCC_PLLMul:

PLL倍频系数

RCC_PLLSource

RCC_PLLSource用以设置PLL的输入时钟源。

表7-4-6.给出了该参数可取的值

表7-4-6.RCC_PLLSource值

RCC_PLLSource

RCC_PLLSource_HSI_Div2

PLL的输入时钟=HSI时钟频率除以2

RCC_PLLSource_HSE_Div1

PLL的输入时钟=HSE时钟频率

RCC_PLLSource_HSE_Div2

PLL的输入时钟=HSE时钟频率除以2

RCC_PLLMul

该参数用以设置PLL的倍频系数。

表7-4-7.给出了该参数可取的值

表7-4-7.RCC_PLLMul值

RCC_PLLMul

描述

RCC_PLLMul_2

PLL输入时钟x2

RCC_PLLMul_3

PLL输入时钟x3

RCC_PLLMul_4

PLL输入时钟x4

RCC_PLLMul_5

PLL输入时钟x5

RCC_PLLMul_6

PLL输入时钟x6

RCC_PLLMul_7

PLL输入时钟x7

RCC_PLLMul_8

PLL输入时钟x8

RCC_PLLMul_9

PLL输入时钟x9

RCC_PLLMul_10

PLL输入时钟x10

RCC_PLLMul_11

PLL输入时钟x11

RCC_PLLMul_12

PLL输入时钟x12

RCC_PLLMul_13

PLL输入时钟x13

RCC_PLLMul_14

PLL输入时钟x14

RCC_PLLMul_15

PLL输入时钟x15

RCC_PLLMul_16

PLL输入时钟x16

警告:

必须正确设置软件,使PLL输出时钟频率不超过72MHz

/*设定PLL时钟输出72MHz使用8MHz外部晶振*/

RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

7.4.5函数RCC_PLLCmd

表7-4-8.描述了函数RCC_PLLCmd

RCC_PLLCmd

voidRCC_PLLCmd(FunctionalStateNewState)

使能或者失能PLL

NewState:

PLL新状态

这个参数可以取:

ENABLE或者DISABLE

如果PLL被用于系统时钟,,那么它不能被失能

/*使能PLL*/

RCC_PLLCmd(ENABLE);

7.4.6函数RCC_SYSCLKConfig

表7-4-9.描述了函数RCC_SYSCLKConfig

RCC_SYSCLKConfig

voidRCC_SYSCLKConfig(u32RCC_SYSCLKSource)

设置系统时钟(SYSCLK)

RCC_SYSCLKSource:

用作系统时钟的时钟源

RCC_SYSCLKSource:

该参数设置了系统时钟(见表7-4-10)。

表7-4-10RCC_SYSCLKSource值

RCC_SYSCLKSource

RCC_SYSCLKSource_HSI

选择HSI作为系统时钟

RCC_SYSCLKSource_HSE

选择HSE作为系统时钟

RCC_SYSCLKSource_PLLCLK

选择PLL作为系统时钟

/*选择PLL作为系统时钟源*/

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

7.4.7函数RCC_GetSYSCLKSource

表7-4-11.描述了函数RCC_GetSYSCLKSource

RCC_GetSYSCLKSource

u8RCC_GetSYSCLKSource(void)

返回用作系统时钟的时钟源

用作系统时钟的时钟源:

0x00:

HSI作为系统时钟

0x04:

HSE作为系统时钟

0x08:

PLL作为系统时钟

/*检测HSE是否为系统时钟*/

if(RCC_GetSYSCLKSource()!

=0x04)

7.4.8函数RCC_HCLKConfig

表7-4-12描述了函数RCC_HCLKConfig

RCC_HCLKConfig

voidRCC_HCLKConfig(u32RCC_HCLK)

设置AHB时钟(HCLK)

RCC_HCLK:

定义HCLK,该时钟源自系统时钟(SYSCLK)

RCC_HCLK:

该参数设置了AHB时钟,表7-4-13.给出了该参数可取的值。

表7-4-13RCC_HCLK值

RCC_HCLK

RCC_SYSCLK_Div1

AHB时钟=系统时钟

RCC_SYSCLK_Div2

AHB时钟=系统时钟/2

RCC_SYSCLK_Div4

AHB时钟=系统时钟/4

RCC_SYSCLK_Div8

AHB时钟=系统时钟/8

RCC_SYSC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1