这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 电灯大师:从零点亮一颗LED

共1条 1/1 1 跳转至页

电灯大师:从零点亮一颗LED

菜鸟
2026-10-21 15:54:15     打赏
电灯大师:从零点亮一颗 LED

平台:NUCLEO-H533RE(STM32H533RET6)|语言:C++
工具链:STM32CubeMX + CMake + VSCode

点灯是嵌入式的“Hello World”,却能把 建工程 → 读原理图 → 配时钟 → 写代码 → 下载调试 这条链路完整走一遍。本文沿用系列里的 C++ + CMake 开发方式,从空白工程开始,让 NUCLEO-H533RE 板上的绿色 LED 以 1 Hz 闪烁。

一、新建 CubeMX 工程

1.1 选择芯片

打开 STM32CubeMX,在 MCU/MPU Selector 中搜索 STM32H533RET6,确认右侧的封装、Flash、RAM 等信息后,点击 Start Project。

image.png

图 1:在 MCU/MPU Selector 中选中 STM32H533RET6(对应 NUCLEO-H533RE)

1.2 处理 TrustZone 提示

STM32H5 系列带 Arm TrustZone,新建工程时会询问是否启用安全隔离。本例不涉及安全分区,选择 without TrustZone activated,点击 OK。

image.png

图 2:TrustZone 选择“不启用”

1.3 保留 ICACHE / MPU 默认配置

紧接着会提示是否为 ICACHE 和 MPU 访问 OTP / RO 区域应用默认配置,直接点 Yes 即可,省去手动配置,性能也更好。

image.png

图 3:建议直接 Yes,启用默认的 ICACHE 与 MPU 配置

二、先读原理图,再动配置

配置外设之前,先确认两件事:LED 接在哪个引脚、外部晶振是多少。这两点都能在 NUCLEO-H533RE 的原理图里找到。

2.1 LED:PA5,低电平点亮

image.png

图 4:用户 LED(D2,GREEN)由 PA5 经三极管 Q1 驱动,低电平点亮

从原理图可以读出:

  • 控制引脚是 PA5;

  • 采用低电平点亮,PA5 输出低电平时 LED 导通;

  • 相比高电平点亮,这种接法下 GPIO 以灌电流方式工作,驱动能力更好,LED 也更亮。

因此 PA5 的初始电平应设为高:复位后 LED 保持熄灭,等程序里主动拉低再点亮。

2.2 外部晶振:24 MHz

image.png

图 5:HSE 使用 24 MHz 晶振(X1),LSE 为 32.768 kHz(本例不使用)

HSE 接的是 24 MHz 晶振(X1,OSC_IN / OSC_OUT),后面的时钟树就以此为输入。

三、CubeMX 外设配置

3.1 调试接口:Serial Wire

在左侧 Trace and Debug → DEBUG(旧版本在 System Core → SYS)中,把 Debug 设为 Serial Wire。

image.png

图 6:Debug 选择 Serial Wire,保留 PA13 / PA14 的 SWD 功能

为什么第一步就配调试口

把 PA13 / PA14 保留给 SWD,避免它们被当作普通 GPIO 占用,导致后面下载、调试都连不上。

3.2 时钟树:24 MHz → 250 MHz

在 System Core → RCC 中,把 High Speed Clock (HSE) 设为 Crystal/Ceramic Resonator,Low Speed Clock (LSE) 保持 Disable;再切到 Clock Configuration,将 HSE 选为 PLL1 的输入源,按图设置分频与倍频。

image.png

图 7:HSE 24 MHz 作为 PLL 源,SYSCLK 250 MHz,AHB 不分频

STM32H533 的最高主频为 250 MHz,这里直接拉满:SYSCLK = HCLK = 250 MHz,AHB Prescaler = /1。若右上角出现 Resolve Clock Issues 红标,按提示逐项检查未使能的时钟源即可。

3.3 GPIO:PA5 推挽输出

回到 Pinout & Configuration,在芯片图上左键点击 PA5,选择 GPIO_Output;再在 System Core → GPIO 中按下表配置:

参数取值
GPIO output levelHigh
GPIO modeOutput Push Pull
GPIO Pull-up/Pull-downNo pull-up and no pull-down
Maximum output speedLow

image.png

图 8:PA5 设为推挽输出,初始高电平

初始电平为什么是 High

LED 是低电平点亮,初始拉高可以让复位后 LED 保持熄灭,避免上电瞬间闪一下。

LED 的电流很小,推挽输出 + 低速档完全够用,也少了不必要的开关噪声。

四、生成 CMake 工程

4.1 Project Manager 设置

切到 Project Manager,按下表填写:

配置项取值
Project Nameled
Project Location全英文路径,例如 E:\stm32cubemx\todo
Application StructureAdvanced
Toolchain / IDECMake
Code GeneratorCopy only the necessary library files
Generated files勾选 Generate peripheral initialization as a pair of '.c/.h' files per peripheral
勾选 Keep User Code when re-generating

image.png

图 9:工程名、路径、CMake 工具链与代码生成选项

路径不要带中文

CubeMX 生成的工程路径请保持全英文,中文路径在 CMake / GCC 环节很容易出现难以排查的报错。

4.2 生成代码

点击右上角的 GENERATE CODE,等待生成完成后选择 Open Project,即可用 VSCode 打开工程。

五、用 C++ 封装 GPIO

5.1 为什么再包一层

HAL_GPIO_WritePin() 已经够用,但点灯只是开始,后面还要驱动蜂鸣器、步进电机。直接写 BSRR 寄存器可以省掉函数调用开销,也更贴近底层。于是把“端口 + 引脚”封装成一个轻量的 STM32GPIO 类:

class STM32GPIO
{
public:
    // irq 预留给后续中断 / EXTI 使用,点灯实验用不到,先给默认值
    STM32GPIO(GPIO_TypeDef* port, uint16_t pin, IRQn_Type irq = NonMaskableInt_IRQn)
        : port_(port), pin_(pin), irq_(irq) {}

    inline void Write(bool value)
    {
        if (value)
        {
            // BSRR 低 16 位写 1:置位
            port_->BSRR = static_cast<uint32_t>(pin_);
        }
        else
        {
            // BSRR 高 16 位写 1:复位
            port_->BSRR = static_cast<uint32_t>(pin_) << 16;
        }
    }

private:
    GPIO_TypeDef* port_;
    uint16_t pin_;
    IRQn_Type irq_;
};

BSRR 的好处是原子操作:置位、复位各写一次寄存器,不需要“读—改—写”,也不会影响同一端口的其他引脚。

5.2 在 main 里点灯

先定义 LED 对象,再在 while (true) 中翻转电平:

// GPIO
static STM32GPIO PA5(GPIOA, GPIO_PIN_5);

/* User Code Begin 3 */
while (true)
{
    PA5.Write(false);   // 低电平,点亮
    HAL_Delay(500);
    PA5.Write(true);    // 高电平,熄灭
    HAL_Delay(500);
}

亮 500 ms、灭 500 ms,正好是 1 Hz 的闪烁。

代码写在 USER CODE 区

只有写在 /* USER CODE BEGIN ... */ 与 /* USER CODE END ... */ 之间的内容,才不会被 CubeMX 重新生成时覆盖。

六、编译、下载与验证

在 VSCode 中装好 CMake Tools 与 STM32 扩展,打开工程后先 Configure、再 Build。随后打开 运行和调试,选择 STM32Cube: STM32 Launch STLink GDB Server(NUCLEO 板载 ST-Link),按 F5 下载并启动调试。

image.png

图 10:在 VSCode 的运行和调试中选择 ST-Link GDB Server

下载成功后,板载绿色 LED 会以 1 Hz 的频率闪烁——点灯成就达成。

七、小结

这次点灯把整条开发链路串了起来:

  1. CubeMX 选型建工程,处理 TrustZone 与 ICACHE 默认配置;

  2. 从原理图确认 LED 引脚与有效电平(PA5,低电平点亮);

  3. 配置 SWD、HSE 24 MHz → 250 MHz 时钟树、PA5 推挽输出;

  4. 生成 CMake 工程,用 C++ 封装 GPIO 并翻转电平;

  5. VSCode + ST-Link 下载验证。

下一篇用 PWM 驱动蜂鸣器,让板子“唱”起来。





关键词: 2026年第     基于     边缘     电机     状态     检测     ---    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]