>ตัวอย่างใช้งาน>
>N32G031_LED_BLINK

กระพริบ LED บน N32G031

N32G031_LED_BLINK

บทนำ

โปรเจกต์ LED Blink เป็นตัวอย่างพื้นฐานที่สุดในการเริ่มต้นเรียนรู้ไมโครคอนโทรลเลอร์ (เปรียบเหมือน "Hello World" ของโลก Embedded) เพื่อทดสอบสัญญาณนาฬิกา การกำหนดค่า GPIO ให้เป็น Digital Output และการสลับสถานะแรงดันไฟฟ้าด้วยฟังก์ชันหน่วงเวลา

ไมโครคอนโทรลเลอร์เป้าหมาย

Nations N32G031 Cortex-M0

อุปกรณ์ต่อพ่วง

GPIO Port A (PA1)

ความถี่

0.5 Hz (1000ms ON / 1000ms OFF)

วิดีโอสาธิตการทำงาน

การต่อวงจร

เชื่อมต่อ LED และตัวต้านทานจำกัดกระแสเข้ากับขาต่อบนบอร์ดพัฒนาตามตารางด้านล่าง:

อุปกรณ์ขาอุปกรณ์ (Pin)ขาบอร์ด N32G031หมายเหตุ & ความปลอดภัย
LED (สีแดง)แอโนด (+)PA1ต่ออนุกรมผ่านตัวต้านทาน 220Ω – 330Ω
LED (สีแดง)แคโทด (-)GNDกราวด์ร่วมของระบบ

การทำงาน & ลอจิกการทำงาน

เฟิร์มแวร์จะทำงานวนลูปตามที่กำหนดค่าผ่านไลบรารี N32G031 Standard Peripheral Library โดยเริ่มเปิดสัญญาณนาฬิกาพอร์ต GPIOA กำหนดขา PA1 เป็น Push-Pull Digital Output และสลับระดับแรงดันไฟฟ้าของขาด้วยคำสั่งรีจิสเตอร์ฮาร์ดแวร์และการหน่วงเวลา

ขั้นตอนที่ 1 : กำหนดค่าเริ่มต้น

เปิดสัญญาณนาฬิกา & ตั้งค่าขา PA1

เรียกใช้ RCC_EnableAPB2PeriphClk เพื่อจ่าย Clock ให้ GPIOA และตั้งค่า GPIO_Mode เป็น Output Push-Pull

ขั้นตอนที่ 2 : ลูปการทำงาน

สลับสถานะ HIGH / LOW พร้อม Delay

สั่ง GPIO_SetBits เปิดไฟค้างไว้ 1,000ms จากนั้นสั่ง GPIO_ResetBits ปิดไฟ 1,000ms วนซ้ำต่อเนื่อง

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. เปิดสัญญาณนาฬิกา (Clock) ให้พอร์ต A */
  RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);

  /* 2. ตั้งค่าขา PA1 (ไฟสีแดง) เป็น Output */
  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) {
      /* -------- สั่งไฟกะพริบ -------- */
      GPIO_SetBits(GPIOA, GPIO_PIN_1);     // เปิดไฟแดง (ON)
      Delay_ms_Simple(1000);               // หน่วงเวลา 1 วินาที

      GPIO_ResetBits(GPIOA, GPIO_PIN_1);   // ปิดไฟแดง (OFF)
      Delay_ms_Simple(1000);               // หน่วงเวลา 1 วินาที
  }
}

ไอเดียการเรียนรู้ & ต่อยอดด้วย AI

จากการวิเคราะห์สถาปัตยกรรมโค้ดและโครงสร้างการทำงาน ผู้เรียนสามารถต่อยอดร่วมกับ UnityMbed AI Copilot ได้ดังนี้:

1

พื้นฐานสัญญาณดิจิทัล (Digital Outputs)

ทำความเข้าใจหลักการสถานะ HIGH (ON) และ LOW (OFF) ในวงจรอิเล็กทรอนิกส์ดิจิทัล และการทำงานของ GPIO Registers

2

การทดลองความถี่การกระพริบ (The Speed Challenge)

ท้าทายให้ผู้เรียนลองปรับเวลา Delay เช่น ปรับเป็น 100ms เป็นไฟแฟลช หรือลองเปิด 100ms แต่ดับ 2000ms เพื่อดูความถี่ของสัญญาณ

3

จังหวะการเต้นของหัวใจ (Heartbeat Effect)

ลองขอให้ AI สร้างชุดคำสั่งลำดับ Delay เพื่อทำให้ไฟ LED กะพริบเป็นจังหวะการเต้นของหัวใจ (ตึก... ตัก... ตึก... ตัก...)

4

ระบบนับเวลาแบบไม่บล็อก (SysTick Non-Blocking)

ลองขอให้ AI เขียนโค้ดกระพริบไฟแบบไม่ใช้ Simple Delay แต่ใช้ SysTick Timer เพื่อให้ MCU สามารถประมวลผลงานอื่นไปพร้อมกันได้

คู่มือการ Build และ Flash

1

เปิดโปรเจกต์ (Open Project): เปิดโฟลเดอร์โปรเจกต์นี้ใน IDE โดยตรง

2

Build & Flash: เพียงคลิกปุ่ม Build และ Flash บนแถบเครื่องมือของอินเทอร์เฟซ