STM32HAL库开发笔记-STM32CubeMX点灯

学一下HAL库对接一下实验室项目

目录

1.新建工程:

2.选择芯片

3.配置系统:

4.配置时钟引脚

5.配置时钟

[STM32 时钟系统怎么设置?](#STM32 时钟系统怎么设置?)

时钟频率越高运行速度越快吗?

总结:

6.选工程的IDE以及命名

[8. 配置引脚功能](#8. 配置引脚功能)

9.GPIO输出点灯功能

10.流水灯闪烁功能


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 系列开发的场景。虽然相比寄存器级编程,它有一点点性能开销,但对于绝大多数嵌入式项目来说,这点开销完全可以忽略,换来的是开发效率的大幅提升。

相关推荐
Rorsion2 小时前
第七章:串行总线与接口技术
单片机·嵌入式硬件·串口通信·通信协议·备考ing
找方案2 小时前
hello-agents 学习笔记:智能体发展史 —— 从符号逻辑到 AI 协作的进化之旅
人工智能·笔记·学习·智能体·hello-agents
anghost1502 小时前
基于MSP430单片机的老人睡眠质量监测系统设计
单片机·嵌入式硬件
一杯原谅绿茶2 小时前
单片机的软件串口通信
单片机·嵌入式硬件
蒙奇D索大2 小时前
【数据结构】考研408 | 平方探测法精讲:跳跃探查的艺术与聚集迷思
数据结构·笔记·考研·改行学it
代码游侠2 小时前
应用——Linux进程通信与信号处理
linux·运维·服务器·笔记·学习·信号处理
AI视觉网奇2 小时前
Ue5 端上 搭建笔记
笔记·ue5
d111111111d2 小时前
在STM32中,中断服务函数的命名有什么要求?
笔记·stm32·单片机·嵌入式硬件·学习·c#
易水寒陈2 小时前
MultiTimer源码分析
stm32·单片机