>應用案例>
>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 按鈕即可。