簡介
這是一個使用 N32G031 微控制器學習基本 GPIO(一般用途輸入/輸出)控制的入門專案。它在基礎「Hello World」範例上進一步依序控制 PB1、PB3、PB6 與 PB7 上的板上 LED,無須外部接線即可學習循序邏輯與計時功能。此專案已針對 UnityMbed 跨平台工作流程最佳化。
Nations N32G031 Cortex-M0
PB1, PB3, PB6, PB7
板上 LED 跑馬燈
示範影片
接線與硬體連接
無須外部接線: 本專案直接使用 UnityMbed Starter Kit 開發板上整合的 LED;這些 LED 清楚標示為 PB7、PB6、PB3 與 PB1。
| 裝置 | 腳位 | N32G031 開發板腳位 | 說明與建議 |
|---|---|---|---|
| 板上 LED 1 | LED 1 | PB1 | 板上 SMD LED 1 |
| 板上 LED 2 | LED 2 | PB3 | 板上 SMD LED 2 |
| 板上 LED 3 | LED 3 | PB6 | 板上 SMD LED 3 |
| 板上 LED 4 | LED 4 | PB7 | 板上 SMD LED 4 |
運作方式與執行邏輯
上電並將程式碼燒錄至開發板後,微控制器會持續執行以下迴圈,形成流水燈效果:
啟用時脈並設定 PMODE/POTYPE
透過 RCC->APB2PCLKEN 的第 3 位元啟用時脈,並設定 GPIOB 的 PMODE 與 POTYPE 暫存器,將 PB1、PB3、PB6、PB7 設為推挽輸出。
逐腳位設定/清除 PBSC 位元
透過操作 PBSC 暫存器,依序點亮並熄滅 PB1 → PB3 → PB6 → PB7,然後重新開始。
// 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 探索以下延伸應用:
多腳位控制
理解 HIGH/LOW 狀態,並學習透過位元運算同時操作與控制多個 GPIO 腳位。
調整流水燈速度
修改程式碼中的 delay(400000)。例如改為 50000,可觀察更快速、流暢的掃描效果。
往返流水燈效果
請 AI 修改迴圈,讓 LED 依 PB1 → PB3 → PB6 → PB7 → PB6 → PB3 → PB1 的順序往返點亮。
對稱成對閃爍
請 AI 編寫邏輯:先同時點亮 PB1 與 PB7,再同時點亮 PB3 與 PB6,形成蝴蝶振翅般的對稱節奏。
建置與燒錄指南
開啟專案: 直接在 IDE 中開啟此專案資料夾。
建置與燒錄: 按一下介面工具列中的 Build 與 Flash 按鈕即可。