簡介
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 按鈕即可。