简介
LED 闪烁示例是嵌入式系统的入门基础,相当于嵌入式世界的“Hello World”。它展示如何初始化 MCU 时钟、将 GPIO 引脚寄存器配置为数字输出,并通过确定性的延时周期切换电平。
目标 MCU
Nations N32G031 Cortex-M0
外设
GPIO Port A (PA1)
频率
0.5 Hz (1000ms ON / 1000ms OFF)
演示视频
接线与硬件连接
按照下表,将 LED 和限流电阻连接到开发板排针:
| 元件 | 引脚 | N32G031 开发板引脚 | 说明与安全事项 |
|---|---|---|---|
| LED(红色) | 阳极(+) | PA1 | 串联 220Ω–330Ω 电阻 |
| LED(红色) | 阴极(−) | GND | 系统共地 |
运行方式与执行逻辑
固件使用 N32G031 标准外设库执行周期循环:先启用 GPIOA 外设时钟,将 PA1 配置为推挽数字输出,再通过硬件寄存器操作和软件延时周期切换引脚电平。
阶段 1:初始化
外设时钟与 GPIO 初始化
通过 APB2 外设启用 GPIOA 时钟,并将 PA1 配置为通用推挽输出。
阶段 2:无限循环
通过延时切换 HIGH/LOW
调用 GPIO_SetBits 点亮 LED 1000ms,再调用 GPIO_ResetBits 熄灭 LED 1000ms,并持续循环。
main.c
#include "n32g031.h"
#include "n32g031_gpio.h"
#include "n32g031_rcc.h"
/* 简单延时函数(1000 约等于 1 秒) */
void Delay_ms_Simple(uint32_t ms) {
for(volatile uint32_t i = 0; i < ms * 1200; i++) {
__NOP();
}
}
int main(void) {
/* 1. 启用 GPIOA 外设时钟 */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);
/* 2. 将 PA1(红色 LED)配置为推挽输出 */
GPIO_InitType GPIO_InitStructure;
GPIO_InitStruct(&GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_1;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
while(1) {
/* -------- LED 闪烁序列 -------- */
GPIO_SetBits(GPIOA, GPIO_PIN_1); // 点亮红色 LED
Delay_ms_Simple(1000); // 延时 1 秒
GPIO_ResetBits(GPIOA, GPIO_PIN_1); // 熄灭红色 LED
Delay_ms_Simple(1000); // 延时 1 秒
}
}学习与 AI 扩展思路
根据代码架构与执行流程的分析,学习者可以借助 UnityMbed AI Copilot 探索以下扩展:
1
数字输出基础
理解数字电子电路中的 HIGH(开)与 LOW(关)状态,以及 GPIO 寄存器的工作方式。
2
调整闪烁时序
尝试修改延时时间:设为 100ms 可模拟频闪效果;点亮 100ms、熄灭 2000ms 则可用于理解占空比。
3
心跳节奏效果
让 AI 编写一组延时序列,使 LED 按照人类心跳(咚哒……咚哒……)的节奏闪烁。
4
非阻塞式 SysTick
让 AI 使用 ARM SysTick 中断重写闪烁逻辑,实现非阻塞式执行,使 MCU 能同时处理其他任务。
构建与烧录指南
1
打开项目: 直接在 IDE 中打开此项目文件夹。
2
构建与烧录: 点击界面工具栏中的 Build 和 Flash 按钮即可。