学一下HAL库对接一下实验室项目
目录
[STM32 时钟系统怎么设置?](#STM32 时钟系统怎么设置?)
[8. 配置引脚功能](#8. 配置引脚功能)
1.新建工程:

2.选择芯片


3.配置系统:

4.配置时钟引脚

5.配置时钟

关于STM32时钟树的讲解,这里的博主讲的很清楚:
【STM32】超清晰STM32时钟树动画讲解_哔哩哔哩_bilibili
STM32 时钟系统怎么设置?
STM32 的时钟系统就像 "供电电网",核心是选源头、调频率、分好配,不用代码的话,核心逻辑就三步:
选基础时钟源有两类核心源头:
内部高速时钟(HSI):不用外接零件,启动快但精度差(温漂),适合临时用;
外部高速时钟(HSE):需要外接晶振(比如 8MHz),精度高,是主流选择。另外还有个 "倍频器"(PLL),能把基础时钟放大(比如 8MHz 的 HSE 放大 9 倍变成 72MHz),这是高频时钟的核心。
给总线分好频率系统时钟(SYSCLK,CPU 核心时钟)要分给不同总线:
AHB 总线:给高速外设(如 GPIO、DMA)用,一般直接用系统时钟;
APB1(低速总线):给串口 2、I2C 等外设用,有频率上限(比如 F1 系列最多 36MHz),需分频;
APB2(高速总线):给串口 1、SPI 等用,上限更高(比如 F1 系列最多 72MHz)。简单说就是 "高的给高速设备,低的给低速设备,别超上限"。
补两个关键设置
闪存等待周期:时钟频率高了,CPU 读闪存的速度要跟上,比如 72MHz 时要让 CPU "等 2 下",不然会跑飞;
外设时钟使能:用哪个外设(比如 GPIOA)就开哪个的时钟,不用的关掉,省功耗。
时钟频率越高运行速度越快吗?
大部分时候是,但不是绝对的:
基础逻辑:频率越高,CPU 每秒执行的指令越多,外设干活也越快(比如串口传数据、SPI 读写速度都会提升),这就像跑步,步频越快,跑的距离越远。
有三个关键限制:
硬件上限:芯片有额定最大频率(比如 F103 最多 72MHz,F407 最多 168MHz),超了会死机甚至损坏;
配套要跟上:频率高了需要合适的供电电压,还要配对闪存等待周期,不然时钟快了 CPU 读数据跟不上,反而卡壳;
有瓶颈就白搭:如果系统慢是因为外设(比如传感器传数据慢),单纯提 CPU 频率没用;而且频率越高,功耗和电磁干扰也越大,稳定性会下降。
总结:
时钟设置核心:选 HSE+PLL 做高频源,给不同总线合理分频,配好闪存等待周期;
频率和速度正相关,但要在芯片和外设的上限内,按需配置就好,不是越高越好。
6.选工程的IDE以及命名


8. 配置引脚功能

我这里板子上的LED是PA8,这里主要设置三个参数,第一个参数是GPIO初始化之后的电平,第二个是设置GPIO的输出模式,第三个是设置GPIO的上下拉,第四个是设置GPIO的输出速度,第五个是设置宏定义。
9.GPIO输出点灯功能

生成代码之后可以在gpio.c里面看到相关的生成代码,与预期是一致的。

10.流水灯闪烁功能

GPIO的高低电平的输出主要看这一句对于引脚电平的设置

另外对于stm32,HAL库也自带了一个粗略延时的功能

在主函数只要写入相应LED闪烁的逻辑就好

HAL 库(STM32Cube HAL)是 ST 官方主推的 STM32 底层软件库,相比传统的标准外设库,它的优势主要体现在易用性、兼容性、生态整合等方面,通俗来讲核心优势有这几点:
1. 上手门槛低,开发效率高
HAL 库对底层寄存器做了高度封装,不用死记寄存器的位定义(比如不用再查RCC_CR的某一位对应什么功能),而是通过结构体 + 标准化函数 实现配置(比如时钟配置用RCC_OscInitTypeDef,串口配置用UART_HandleTypeDef)。哪怕是新手,也能快速实现外设初始化和功能开发,不用从寄存器级开始写代码,节省大量底层调试时间。
2. 跨 STM32 系列兼容性极强
HAL 库设计了统一的 API 接口,同一套代码几乎能在 F1、F4、H7、L4 等不同系列的 STM32 上复用。比如你在 F103 上写的串口收发代码,移植到 F407 时,只需要改少量硬件相关的参数(如引脚),核心逻辑完全不用动,大大降低了跨系列开发的成本。
3. 与 STM32Cube 生态深度绑定,懒人友好
HAL 库和 ST 的CubeMX(图形化配置工具) 是黄金搭档:你只需在 CubeMX 里用鼠标点选时钟源、外设引脚、中断等配置,就能自动生成完整的 HAL 库初始化代码,几乎不用手写底层。此外,还能和 CubeProgrammer(烧录工具)、CubeMonitor(调试工具)等联动,形成完整的开发闭环。
4. 外设驱动全覆盖,官方持续维护
ST 为 HAL 库提供了所有外设的完整驱动(GPIO、USART、I2C、SPI、DMA、ADC、定时器等),甚至包括 CAN、USB、以太网等复杂外设,而且会持续更新修复 bug、适配新芯片。不用自己从零写驱动,也不用担心驱动的稳定性问题。
5. 内置实用功能,减少重复造轮子
HAL 库里集成了很多实用的 "小功能":比如函数返回值的统一错误码(HAL_OK/HAL_ERROR 等)、外设操作的超时机制、中断和 DMA 的便捷封装、低功耗模式的快速配置等。比如串口接收用 HAL 库的HAL_UART_Receive_IT()就能轻松实现中断接收,不用自己处理中断向量和标志位。
6. 社区和文档资源丰富
作为 ST 官方主推的库,HAL 库有完整的官方手册、示例代码,还有大量的社区教程、项目案例。遇到问题时,很容易找到解决方案,相比小众的第三方库,学习和排错的成本更低。
HAL 库的核心优势就是 省心、高效、通用,尤其适合新手入门、快速开发项目,或是需要跨 STM32 系列开发的场景。虽然相比寄存器级编程,它有一点点性能开销,但对于绝大多数嵌入式项目来说,这点开销完全可以忽略,换来的是开发效率的大幅提升。