网站后台更新无法在网页显示,产品设计工具,js调用wordpress文章,网站建设费与无形资产在stm32中#xff0c;时钟系统是非常重要的一环#xff0c;他控制着整个系统的频率。因此#xff0c;我们有理由好好学一下时钟系统。
什么是时钟#xff1f;
时钟是具有周期性的脉冲信号#xff0c;一般我们常用占空比为50%的方波。可以形象的说#xff0c;时钟就是单…在stm32中时钟系统是非常重要的一环他控制着整个系统的频率。因此我们有理由好好学一下时钟系统。
什么是时钟
时钟是具有周期性的脉冲信号一般我们常用占空比为50%的方波。可以形象的说时钟就是单片机的脉搏。
在我常用的stm32F1系列中分别有HSE高速外部LSE低速外部HSI高速内部LSI低速内部。高速的两个一般用于滴答时钟低速的两个一般用于RTC。其中还有两个比较少见的分别是CSS时钟安全系统和FCLK自由运行时钟。CSS作用为若HSE启动失败自动切换HSI且其可以进NMI中断。FCLK用于采样中断和调试模块记时。休眠时仍然有效。
接着我们来看一下stm32f103的时钟树简图。如图所示如果HSE和HSI直接给SYSCLK频率很明显是够不着st公司为SYSCLK设定的官方最大频率的。那他是怎么做到的呢那就是分频PLL锁相环。分频就是使频率变为输入的频率的整数分之一具体由代码实现。PLL原理在此不细说总而言之就是他可以使分频后的频率乘以一个2~16的数使得输出的频率变大。若如图的72MHZ就有可能是8*972MHZ。
在进入SYSCLK系统时钟以后会继续分频输出一个频率给HCLKAHB总线时钟在AHB总线上挂载了内核系统时间和外设同时继续分频给PCLK1和PCLK2其分别是APB1总线和APB2总线的时钟接着在配置链接在这两个总线上的众多外设。 系统时针配置步骤
1.配置HSE_VALUE
配置HSE_VALUE主要是高速HAL库外部的晶振频率。使用的头文件是stm32xxxx_hal_conf.h
2.调用SystemInit()函数
在启动文件中调用在system_stm32xxxx.c中进行定义。如果不需要可以直接注释掉。
3.选择时钟源配置PLL
通过HAL_RCC_OscConfig()函数进行设置其主要选择时HSI还是HSE时钟。其中Osc的意思是振荡器。便是晶振。
HAL_RCC_OscConfig()的形参为一个结构体名字为RCC_OscInitTypeDef。该结构体决定的就是各个振荡器的参数。并且对于PLL结构体还有一个结构体这个结构体便是决定PLL的的信号来源倍数和开启与否。 4.选择系统时钟源配置总线分频器
通过HAL_RCC_ClockConfig()函数进行设置他有两个形参分别是RCC_ClkInitTypeDef*类型的数据和FLatency参数。第一个是用来初始化时钟的他决定了分频的时候的系数。第二个是用来决定FLASH等待多少周期的当系统时针周期在0SYSCLK24MHZ的话选择下图的0个等待周期24MHZSYSCLK48MHZ选择一个等待周期48MHZSYSCLK72MHZ选择一个等待周期。一般对于stm32f1系列是选择2个等待周期。 ATTENTION
不知道前面有没有同学注意到其实我讲漏了一个非常重要的部分那就是时钟的使能与失能 __HAL_RCC_GPIOA_CLK_ENABLE(); 使能GPIO时钟
__HAL_RCC_GPIOA_CLK_DISABLE(); 失能GPIO时钟