1、STM32时钟总结剖析STM32时钟总结一、时钟基本概念 1二、时钟树 6三、 STM32上电后时钟的过程 73.1执行SystemInit()函数 73.2 执行SetSysClock()函数 83.3执行SetSysClockTo72()函数 8 3.3.2 判断外部高速时钟源是否稳定 8 3.3.4 FLASH配置 9 3.3.5 系统时钟配置是HCLK,PCLK2为HCLK,PCLK1为HCLK的一半 9 3.3.6 配置PLL在这里修改倍频值。RCC_CFGR_PLLMULL9 9 3.3.7失能PLL;判断PLL是否Readay;选择PLL为系统时钟,一直等到时钟稳定 9四、时钟源
2、的选择 104.1系统默认配置时钟8*9=72M 104.2配置HSI(高速内部时钟)为系统主时钟(永远不变8M) 104.3配置HSE为系统主时钟。 8M(和外部晶振有关) 114.4配置PLLCLK为系统主时钟 114.5程序 11五、配置HCLK,PCLK1,PCLK2 11一、时钟基本概念LSE时钟RCC_BDCR(备份与寄存器控制)32.768kHz的低速外部晶体或陶瓷谐振器外部时钟源(LSE旁路)必须提高一个32.768kHz频率的外部时钟源,设置(RCC_(RCC_BDCR)里的LSEB和LSEON位来选择这个模式)LSI低功耗时钟源的角色,它可以在停机和待机模式下保持运行.为独
3、立看门狗和自动唤醒单元提供时钟LSI RC可以通过控制/状态寄存器(RCC_CSR)里的LSION位来启动或关闭。 LSI校准HSE时钟高速外部时钟信号(HSE)由以下两种时钟源产生: HSE外部晶体/陶瓷谐振器 HSE用户外部时钟 .外部时钟源(HSE旁路) 在这个模式里,必须提供外部时钟。它的频率最高可达25MHz。用户可通过设置在时钟控制寄存器中的HSEBYP和HSEON位来选择这一模式。外部晶体/陶瓷谐振器(HSE晶体); 416Mz外部振荡器可为系统提供更为精确的主时钟在时钟控制寄存器RCC_CR中的HSERDY位用来指示高速外部振荡器是否稳定。在启动时,直到这一位被硬件置1,时钟才
4、被释放出来。如果在时钟中断寄存器RCC_CIR中允许产生中断,将会产生相应中断。 系统时钟(SYSCLK)选择系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。 只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。 时钟安全系统(CSS) 时钟安全系统可以通过软件被激活。一旦其被激活,时钟监测器将在HSE振荡器启动延迟后被使能,并在HSE时钟关闭后关闭。 如果HSE时钟发生故障,HSE振荡器被自动关闭,时钟
5、失效事件将被送到高级定时器TIM1的刹车输入端,并产生时钟安全中断CSSI,允许软件完成营救操作。此CSSI中断连接到CortexM3 的NMI中断。 一旦CSS被激活,并且HSE时钟出现故障,CSS中断就产生,并且NMI也自动产生。NMI将被不断执行,直到CSS中断挂起位被清除。因此,在NMI的处理程序中必须通过设置时钟中断寄存器(RCC_CIR)里的CSSC位来清除CSS中断。如果HSE振荡器被直间或间接地作为系统时钟,(间接的意思是:它被作为PLL输入时钟,并且PLL时钟被作为系统时钟),时钟故障将导致系统时钟自动切换到HSI振荡器,同时外部HSE振荡器被关闭。在时钟失效时,如果HSE振
6、荡器时钟(被分频或未被分频)是用作系统时钟的PLL的输入时钟,PLL也将被关闭。 RTC时钟RTCCLK时钟源可以由HSE/128、LSE或LSI时钟提供。除非备份域复位,此选择不能被改变。 除非备份域复位,此选择不能被改变。 看门狗时钟 如果独立看门狗已经由硬件选项或软件启动,LSI振荡器将被强制在打开状态,并且不能被关闭。在LSI振荡器稳定后,时钟供应给IWDG。 时钟输出 微控制器允许输出时钟信号到外部MCO管脚。 相应的GPIO端口寄存器必须被配置为相应功能四个时钟信号可被选作MCO时钟: SYSCLK HSI HSE 除2的PLL时钟 HSI时钟HSI时钟信号由内部8MHz的RC振荡
7、器产生,可直接作为系统时钟或在2分频后作为PLL输入。 HSI RC振荡器能够在不需要任何外部器件的条件下提供系统时钟校准.在时钟控制寄存器里的HSITRIM4:0位来调整HSI频率。 当HSI被用于作为PLL时钟的输入时,系统时钟的最大频率不得超过64MHz。PLL 内部PLL可以用来倍频HSI RC的输出时钟或HSE晶体输出时钟。PLL的设置(选择HIS振荡器除2或HSE振荡器为PLL的输入时钟,和选择倍频因子)必须在其被激活前完成。一旦PLL被激活,这些参数就不能被改动。 如果需要在应用中使用USB接口,PLL必须被设置为输出48或72MHZ时钟,用于提供48MHz的USBCLK时钟。
8、APB2 APB1 AHB高速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控制与状态寄存器的设置,可选择上述时钟或Cortex AHB时钟作为SysTick时钟AHB不分频ADC时钟由高速APB2时钟经2、4、6或8分频后获得。 定时器时钟定时器
9、时钟频率分配由硬件按以下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连接到
10、TIM5的通道4; 3. 通过TIM5的捕获/比较4事件或者中断来测量LSI时钟频率; 4. 根据测量结果和期望的RTC时间基数和独立看门狗的超时时间,设置20位预分频器。 注意2:AHB,APB2,APB1复位和时钟控制 用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。AHB和APB2域的最大频率是72MHZ。APB1域的最大允许频率是36MHZ。SDIO接口的时钟频率固定为HCLK/2。 注意3:MCO: 微控制器时钟输出 由软件置1或清零。 0xx:没有时钟输出; 100:系统时钟(SYSCLK)输出; 101:内部8MHz的RC振荡器时钟输出;
11、 110:外部4-25MHz振荡器时钟输出; 111:PLL时钟2分频后输出。 注意:- 该时钟输出在启动和切换MCO时钟源时可能会被截断。 - 在系统时钟作为输出至MCO管脚时,请保证输出时钟频率不超过50MHz (IO口最高频率) 二、时钟树3、STM32上电后时钟的过程3.1执行SystemInit()函数。复位RCC寄存器的有关时钟的位和失能时钟。3.2 执行SetSysClock()函数。宏定义 SYSCLK_FREQ_72MHz3.3执行SetSysClockTo72()函数。3.3.1 失能HSE(高速外部时钟)3.3.2 判断外部高速时钟源是否稳定。3.3.3稳定后将HSESt
12、atus置为1.3.3.4 FLASH配置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是否Readay;选择PLL为系统时钟,一直等到
13、时钟稳定。四、时钟源的选择初始化后为72M选择外部高速时钟做为时钟源,8M晶振倍频9倍为72M,如果外部晶振是12M,那么主时钟频率为12*9 108M。4.1系统默认配置时钟8*9=72M4.2配置HSI(高速内部时钟)为系统主时钟(永远不变8M)RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); 4.3配置HSE为系统主时钟。 8M(和外部晶振有关)RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);4.4配置PLLCLK为系统主时钟RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)4.5程序RCC_Cl
14、ocksTypeDef RCC_InitStructure;RCC_GetClocksFreq(&RCC_InitStructure); /72 RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); /8RCC_GetClocksFreq(&RCC_InitStructure); / RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);/8RCC_GetClocksFreq(&RCC_InitStructure); / RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/72MRCC_GetClocksFreq(&RCC_InitStructure); /五、配置HCLK,PCLK1,PCLK2 配置HCLK为18M(其他的PCLK1,PCLK2与这个配置类似)RCC_HCLKConfig(RCC_SYSCLK_Div4);/18MRCC_GetClocksFreq(&RCC_InitStructure); /
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1