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

相关推荐
优雅的潮叭18 小时前
c++ 学习笔记之 malloc
c++·笔记·学习
深耕AI18 小时前
【时钟周期 vs 指令】为什么51单片机需要12个时钟周期?
单片机·嵌入式硬件·51单片机
Arciab19 小时前
51单片机_LCD1602液晶显示
网络·嵌入式硬件·51单片机
李派森20 小时前
软考高项(信息系统项目管理师)—第4章 信息系统管理全解析
笔记·计算机网络
浩瀚地学21 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
清风66666621 小时前
基于单片机的多功能智能婴儿车设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
码咔吧咔1 天前
STM32芯片简介,以及STM32的存储器映射是什么?
stm32·单片机·嵌入式硬件
别掩1 天前
MOS防倒灌电路设计
单片机·嵌入式硬件
夜流冰1 天前
EE - 电容电感电路中电流的变化
单片机·嵌入式硬件
今儿敲了吗1 天前
C++概述
c++·笔记