>應用案例>
>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 位元清為 0(推挽)
  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 按鈕即可。