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 4
8 MHz。可以直接选择为系统主系统时钟,也可以作为PLL源,经倍频后选择作为系统的主系统时钟。为低功耗提供更多的选择。其相当于代替了HSI了。
stm32有多个总线,主要有AHB和APB总线
AHB是⾼速总线,是⼀种系统总线,它主要负责连接处理器、DMA等⼀些内部接⼝。AHB 系统由主模块、从模块和基础结构3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。l氨酸
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哦设置AHB和APB总线时钟配置
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;