STM32的系统时钟设置SystemClock_Config()探究


一、首先了解几个硬件名词:

stm32有多种时钟源,为HSE、HSI、LSE、LSI、PLL,对于L系统的,还有一个专门的MSI

1、HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定。

2、HSI是高速内部时钟,RC振荡器,频率为8MHz。精度略差。

3、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。一般为RTC使用。

4、LSI是低速内部时钟,RC振荡器,频率为40kHz。

5、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

6、MSI是L系列独有的,它是一个产生于内部的可选择的时钟源,能提供12种不同频率:100 kHz, 200 kHz, 400 kHz, 800 kHz, 1 MHz, 2 MHz, 4 MHz (default value), 8 MHz, 16 MHz, 24 MHz, 32 MHz and 48 MHz。可以直接选择为系统主系统时钟,也可以作为PLL源,经倍频后选择作为系统的主系统时钟。为低功耗提供更多的选择。其相当于代替了HSI了。

stm32有多个总线,主要有AHBAPB总线

AHB是高速总线,是一种系统总线,它主要负责连接处理器、DMA等一些内部接口。AHB 系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。
APB是低速总线,它主要负责连接外围设备,它又分为APB1和APB2,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。APB桥就是连接AHB和APB中间的玩意。
APB1最大时钟频率为36MHz
APB2最大时钟频率为72MHz

二、其次了解三个结构体:

stm32的HAL库,在系统时钟设置的结构有,RCC_OscInitTypeDef和RCC_ClkInitTypeDef、RCC_PLLInitTypeDef三个。

1、RCC_OscInitTypeDef为设置系统各时钟的来源

 

typedef struct
{
  uint32_t OscillatorType;           //选定将被配置的振荡器        
  uint32_t HSEState;               //HSE状态              
  uint32_t LSEState;               //LSE状态            
  uint32_t HSIState;               //HSI状态             
  uint32_t HSICalibrationValue;      //HSI校准调整值  
  uint32_t LSIState;               //LSI状态              
  RCC_PLLInitTypeDef PLL;       //PLL结构体参数         
} RCC_OscInitTypeDef;

 

2、RCC_ClkInitTypeDef哦设置AHBAPB总线时钟配置

 

 

 

typedef struct
{
  uint32_t ClockType;       //选定将被配置的时钟             
  uint32_t SYSCLKSource;    //用作系统时钟的时钟源选择         
  uint32_t AHBCLKDivider;   //AHB时钟(HCLK)分频器,该时钟由SYSCLK而来      
  uint32_t APB1CLKDivider;  //APB1时钟(PCLK1)分频器,该时钟由HCLK而来      
  uint32_t APB2CLKDivider;  //APB2时钟(PCLK2)分频器,该时钟由HCLK而来      
} RCC_ClkInitTypeDef;

 3、RCC_PLLInitTypeDef设置PLL的相关参数

typedef struct
{
  uint32_t PLLState; //PLL状态
  uint32_t PLLSource;//PLL输入时钟
  uint32_t PLLM;     //PLL
  uint32_t PLLN; 
  uint32_t PLLP; 
  uint32_t PLLQ;      
}RCC_PLLInitTypeDef;

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM