stm32时钟系统简介

时钟系统为硬件系统的各个模块提供时钟信号,就像人的脉搏心跳一样不可或缺,而stm32的结构较为复杂,不同的硬件可能对时钟信号有不同的要求,因此在系统中设置多个振荡器,分别提供时钟信号,实际中经常从一个主振荡器开始,经过多次的倍频、分频、锁相环等电路,生成每个模块的独立时钟信号。相应的从主振荡器到各个模块的时钟信号通路也称为时钟树。
stm32时钟树结构如下:
stm32时钟树结构

时钟系统概述

①、HSI 是高速内部时钟,RC 振荡器,频率为 8MHz。
②、HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为 4MHz~16MHz。
③、LSI 是低速内部时钟,RC 振荡器,频率为 40kHz。
④、LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。
⑤、PLL 为锁相环倍频输出,其时钟输入源可选择为 HSI/2、HSE 或者 HSE/2。倍频可选择为2~16 倍,但是其输出频率最大不得超过 72MHz。
• 很多时钟输出是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、 APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。
• 连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、 I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。
• 连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有 普通IO口(PA~PE)、第二功能IO口。APB2最高时钟为72MHz • 在一个系统刚刚启动时,应首先根据所用到的模块配置整个系统的时钟系统。

基于HAL库的时钟使能和配置

在 STM32F1 的 HAL 库中,外设时钟使能操作都是在 RCC 相关固件库文件头文件 stm32f1xx_hal_rcc.h 定义的。外设时钟使能在 HAL 库中都是通过宏定义标识符来实现的。

#define __HAL_RCC_GPIOA_CLK_ENABLE();//使能 GPIOA 时钟 
#define __HAL_RCC_DMA1_CLK_ENABLE();//使能 DMA1 时钟
#define __HAL_RCC_USART1_CLK_ENABLE();//使能串口 1 时钟 
#define __HAL_RCC_TIM1_CLK_ENABLE();//使能 TIM1 时钟 

我们使用外设的时候需要使能外设时钟,如果我们不需要使用某个外设,同样我们可以静 止某个外设时钟。禁止外设时钟使用方法和使能外设时钟非常类似,同样是头文件中定义的宏定义标识符。

#define __HAL_RCC_GPIOA_CLK_DISABLE()   //禁止GPIOA时钟
#define __HAL_RCC_DMA1_CLK_DISABLE();//禁止 DMA1 时钟 
#define __HAL_RCC_USART1_CLK_DISABLE();//禁止串口 1 时钟 
#define __HAL_RCC_TIM1_CLK_DISABLE();//禁止 TIM1 时钟 

猜你喜欢

转载自blog.csdn.net/qq_46523260/article/details/106861633