>应用案例>
>N32G031_LED_SEQUENCE

依次点亮板载 LED

N32G031_LED_SEQUENCE

简介

这是一个使用 N32G031 微控制器学习基本 GPIO(通用输入/输出)控制的入门项目。它在基础“Hello World”示例上进一步依次控制 PB1、PB3、PB6 和 PB7 上的板载 LED,无需外部接线即可学习顺序逻辑和定时功能。该项目已针对 UnityMbed 跨平台工作流进行优化。

目标 MCU

Nations N32G031 Cortex-M0

工作引脚

PB1, PB3, PB6, PB7

模式

板载 LED 流水灯

演示视频

接线与硬件连接

无需外部接线: 本项目直接使用 UnityMbed Starter Kit 开发板上集成的 LED;这些 LED 清楚标有 PB7、PB6、PB3 和 PB1。

设备引脚N32G031 开发板引脚说明与建议
板载 LED 1LED 1PB1板载 SMD LED 1
板载 LED 2LED 2PB3板载 SMD LED 2
板载 LED 3LED 3PB6板载 SMD LED 3
板载 LED 4LED 4PB7板载 SMD LED 4

运行方式与执行逻辑

上电并将代码烧录到开发板后,微控制器会持续执行以下循环,形成流水灯效果:

阶段 1:寄存器设置

启用时钟并配置 PMODE/POTYPE

通过 RCC->APB2PCLKEN 的第 3 位启用时钟,并配置 GPIOB 的 PMODE 和 POTYPE 寄存器,将 PB1、PB3、PB6、PB7 设为推挽输出。

阶段 2:流水灯循环

逐引脚设置/清除 PBSC 位

通过操作 PBSC 寄存器,依次点亮并熄灭 PB1 → PB3 → PB6 → PB7,然后重新开始。

main.c
// UnityMbed — 在 N32G031 的 PB1、PB3、PB6、PB7 上依次点亮 LED
#include "n32g031.h"

static void delay(volatile uint32_t n) { while (n--) __NOP(); }

int main(void) {
  /* 通过 APB2 的第 3 位启用 GPIOB 时钟 */
  RCC->APB2PCLKEN |= (1u << 3);

  /* 将 PB1、PB3、PB6、PB7 配置为推挽输出 */
  // 清除 PB1[3:2]、PB3[7:6]、PB6[13:12]、PB7[15:14] 的 PMODE 位
  GPIOB->PMODE &= ~((0x3U << 2) | (0x3U << 6) | (0x3U << 12) | (0x3U << 14));
  // 将 PMODE 设为 01(通用输出模式)
  GPIOB->PMODE |=  ((0x1U << 2) | (0x1U << 6) | (0x1U << 12) | (0x1U << 14));

  // 将 PB1、PB3、PB6、PB7 的 POTYPE 位清零(推挽)
  GPIOB->POTYPE &= ~((1U << 1) | (1U << 3) | (1U << 6) | (1U << 7));

  // 初始状态下关闭所有 LED(向 PBSC 的高 16 位写入 1 以清除引脚)
  GPIOB->PBSC = (1U << (1 + 16)) | (1U << (3 + 16)) | (1U << (6 + 16)) | (1U << (7 + 16));

  while (1) {
      // 点亮 PB1
      GPIOB->PBSC = (1U << 1);
      delay(400000);
      GPIOB->PBSC = (1U << (1 + 16)); // 熄灭 PB1

      // 点亮 PB3
      GPIOB->PBSC = (1U << 3);
      delay(400000);
      GPIOB->PBSC = (1U << (3 + 16)); // 熄灭 PB3

      // 点亮 PB6
      GPIOB->PBSC = (1U << 6);
      delay(400000);
      GPIOB->PBSC = (1U << (6 + 16)); // 熄灭 PB6

      // 点亮 PB7
      GPIOB->PBSC = (1U << 7);
      delay(400000);
      GPIOB->PBSC = (1U << (7 + 16)); // 熄灭 PB7
  }
}

学习与 AI 扩展思路

根据代码架构与执行流程的分析,学习者可以借助 UnityMbed AI Copilot 探索以下扩展:

1

多引脚控制

理解 HIGH/LOW 状态,并学习通过位运算同时操作和控制多个 GPIO 引脚。

2

调整流水灯速度

修改代码中的 delay(400000)。例如改为 50000,可观察更快速、流畅的扫描效果。

3

往返流水灯效果

让 AI 修改循环,使 LED 按 PB1 → PB3 → PB6 → PB7 → PB6 → PB3 → PB1 的顺序往返点亮。

4

对称成对闪烁

让 AI 编写逻辑:先同时点亮 PB1 与 PB7,再同时点亮 PB3 与 PB6,形成蝴蝶振翅般的对称节奏。

构建与烧录指南

1

打开项目: 直接在 IDE 中打开此项目文件夹。

2

构建与烧录: 点击界面工具栏中的 Build 和 Flash 按钮即可。