>应用案例>
>N32G031_LED_BLINK

让 N32G031 上的 LED 闪烁

N32G031_LED_BLINK

简介

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 按钮即可。