STM32时钟总结剖析Word文档格式.docx
《STM32时钟总结剖析Word文档格式.docx》由会员分享,可在线阅读,更多相关《STM32时钟总结剖析Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
4.1系统默认配置时钟8*9=72M10
4.2配置HSI(高速内部时钟)为系统主时钟(永远不变8M)10
4.3配置HSE为系统主时钟。
8M(和外部晶振有关)11
4.4配置PLLCLK为系统主时钟11
4.5程序11
五、配置HCLK,PCLK1,PCLK211
一、时钟基本概念
LSE时钟
RCC_BDCR(备份与寄存器控制)
32.768kHz的低速外部晶体或陶瓷谐振器
外部时钟源(LSE旁路)
必须提高一个32.768kHz频率的外部时钟源,设置(RCC_(RCC_BDCR)里的LSEB和LSEON位来选择这个模式
)
LSI
低功耗时钟源的角色,它可以在停机和待机模式下保持运行.为独立看门狗和自动唤醒单元提供时钟
LSIRC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。
LSI校准
HSE时钟
高速外部时钟信号(HSE)由以下两种时钟源产生:
HSE外部晶体/陶瓷谐振器
HSE用户外部时钟.
外部时钟源(HSE旁路)在这个模式里,必须提供外部时钟。
它的频率最高可达25MHz。
用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。
外部晶体/陶瓷谐振器(HSE晶体);
4~16Mz外部振荡器可为系统提供更为精确的主时钟
在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。
在启动时,直到这一位被硬件置’1’,时钟才被释放出来。
如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。
系统时钟(SYSCLK)选择
系统复位后,HSI振荡器被选为系统时钟。
当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。
只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。
在被选择时钟源没有就绪时,系统时钟的切换不会发生。
直至目标时钟源就绪,才发生切换。
时钟安全系统(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也将被关闭。
RTC时钟
RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。
除非备份域复位,此选择不能被改变。
看门狗时钟
如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。
在LSI振荡器稳定后,时钟供应给IWDG。
时钟输出
微控制器允许输出时钟信号到外部MCO管脚。
相应的GPIO端口寄存器必须被配置为相应功能
四个时钟信号可被选作MCO时钟:
SYSCLK
HSI
HSE
除2的PLL时钟
HSI时钟
HSI时钟信号由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入。
HSIRC振荡器能够在不需要任何外部器件的条件下提供系统时钟
校准.在时钟控制寄存器里的HSITRIM[4:
0]位来调整HSI频率。
当HSI被用于作为PLL时钟的输入时,系统时钟的最大频率不得超过64MHz。
PLL
内部PLL可以用来倍频HSIRC的输出时钟或HSE晶体输出时钟。
PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。
一旦PLL被激活,这些参数就不能被改动。
如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。
APB2APB1AHB
高速APB(APB2)和低速APB(APB1)域的频率
用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。
AHB和APB2域的最大频率是72MHZ。
APB1域的最大允许频率是36MHZ。
SDIO接口的时钟频率固定为HCLK/2。
SysTick时钟与ADC时钟
RCC通过AHB时钟8分频后供给Cortex系统定时器的(SysTick)外部时钟
通过对SysTick控制与状态寄存器的设置,可选择上述时钟或CortexAHB时钟作为SysTick时钟AHB不分频
ADC时钟由高速APB2时钟经2、4、6或8分频后获得。
定时器时钟
定时器时钟频率分配由硬件按以下2种情况自动设置:
1.如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
2.否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。
注意1:
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位预分频器。
注意2:
AHB,APB2,APB1复位和时钟控制
注意3:
MCO:
微控制器时钟输出
由软件置’1’或清零。
0xx:
没有时钟输出;
100:
系统时钟(SYSCLK)输出;
101:
内部8MHz的RC振荡器时钟输出;
110:
外部4-25MHz振荡器时钟输出;
111:
PLL时钟2分频后输出。
注意:
-该时钟输出在启动和切换MCO时钟源时可能会被截断。
-在系统时钟作为输出至MCO管脚时,请保证输出时钟频率不超过50MHz(IO口最高频率)
二、时钟树
3、STM32上电后时钟的过程
3.1执行SystemInit()函数。
复位RCC寄存器的有关时钟的位和失能时钟。
3.2执行SetSysClock()函数。
宏定义SYSCLK_FREQ_72MHz
3.3执行SetSysClockTo72()函数。
3.3.1失能HSE(高速外部时钟)
3.3.2判断外部高速时钟源是否稳定。
3.3.3稳定后将HSEStatus置为1.
3.3.4FLASH配置
3.3.5系统时钟配置是HCLK,PCLK2为HCLK,PCLK1为HCLK的一半。
3.3.6配置PLL。
在这里修改倍频值。
RCC_CFGR_PLLMULL9
在这里可以修改成16M,24M,32M,48,56M,64M,72M.
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_3);
RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_2);
4*[2,16]范围为[8M,64M]。
3.3.7失能PLL;
选择PLL为系统时钟,一直等到时钟稳定。
四、时钟源的选择
初始化后为72M选择外部高速时钟做为时钟源,8M晶振倍频9倍为72M,如果外部晶振是12M,那么主时钟频率为12*9108M。
4.1系统默认配置时钟8*9=72M
4.2配置HSI(高速内部时钟)为系统主时钟(永远不变8M)
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
8M(和外部晶振有关)
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
4.4配置PLLCLK为系统主时钟
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)
4.5程序
RCC_ClocksTypeDefRCC_InitStructure;
RCC_GetClocksFreq(&
RCC_InitStructure);
//72
//8
//
//8
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//72M
五、配置HCLK,PCLK1,PCLK2
配置HCLK为18M(其他的PCLK1,PCLK2与这个配置类似)
RCC_HCLKConfig(RCC_SYSCLK_Div4);
//18M