总 :STM32------学习总纲
参考资料:
stm32芯片资料STM32F103ZET6(English)
一、时钟树
1.1 什么是时钟(单片机)



1.2 时钟树(F1)
其他系列看B站视频。
1.2.1 振荡器

RC:RC振荡器

1.2.2 时钟树简图


1.2.3 参考手册分析

外部高速晶振(High speed External),
外部低速晶振(Low speed External),
内部高速晶振(High speed Internal),内部低速晶振(Low speed Internal)
1.2.4 芯片手册总线

AHB、APB1、APB2

1.2.5 配置时钟树 HAL 库函数
|---------------------|-----------------------------|----------------------------------------------------------------------------|
| 时钟源、锁相环 | HAL_RCC_OscConfig() | |
| 系统时钟、总线 | HAL_RCC_ClockConfig() | |
| 使能外设时钟 | __HAL_RCC_PPP_CLK_ENABLE() | 为了低功耗,默认不使能外设时钟。 |
| 拓展外设时钟(RTC/ADC/USB) | HAL_RCCEx_PeriphCLKConfig() | 外设时钟配置,不同系列外设配置不同 |
(F4,F7,H7)具体配置看参考手册和芯片手册具体总线时钟配置
1.2.6 STM32CubeMX 时钟树配置页面

二、配置系统时钟(F1)
2.1 系统时钟配置步骤简图

H7系列才在sys_stm32_clock_init()中有第5步。
2.2 外设时钟使能和失能



2.3 sys_stm32_clock_init()
一般靠以下两个HAL库函数实现
2.3.1 HAL_RCC_OscConfig()

即 控制寄存器。
参考手册中的RCC寄存器描述

例如HSI校准:

2.3.2 HAL_RCC_ClockConfig()

等待周期:
F1系统时钟72MHz,FLASH时钟来源于系统时钟(FLASH最大24M)

2.4 工程代码配置系统时钟
2.4.1 配置 HSE_VALUE值

2.4.2 调用 SystemInit 函数
在启动文件中调用。

不想调用就屏蔽

具体定义:

2.4.3 sys_stm32_clock_init()函数定义与 HAL库函数调用


具体配置参数是在时钟树配置时的选择值。
HAL库函数的参数也就是相应寄存器的控制,不关心具体寄存器地址,关心寄存器控制值。(简化寄存器控制)

