กระพริบ 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 และสลับระดับแรงดันไฟฟ้าของขาด้วยคำสั่งรีจิสเตอร์ฮาร์ดแวร์และการหน่วงเวลา
เปิดสัญญาณนาฬิกา & ตั้งค่าขา PA1
เรียกใช้ RCC_EnableAPB2PeriphClk เพื่อจ่าย Clock ให้ GPIOA และตั้งค่า GPIO_Mode เป็น Output Push-Pull
สลับสถานะ HIGH / LOW พร้อม Delay
สั่ง GPIO_SetBits เปิดไฟค้างไว้ 1,000ms จากนั้นสั่ง GPIO_ResetBits ปิดไฟ 1,000ms วนซ้ำต่อเนื่อง
#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 ได้ดังนี้:
พื้นฐานสัญญาณดิจิทัล (Digital Outputs)
ทำความเข้าใจหลักการสถานะ HIGH (ON) และ LOW (OFF) ในวงจรอิเล็กทรอนิกส์ดิจิทัล และการทำงานของ GPIO Registers
การทดลองความถี่การกระพริบ (The Speed Challenge)
ท้าทายให้ผู้เรียนลองปรับเวลา Delay เช่น ปรับเป็น 100ms เป็นไฟแฟลช หรือลองเปิด 100ms แต่ดับ 2000ms เพื่อดูความถี่ของสัญญาณ
จังหวะการเต้นของหัวใจ (Heartbeat Effect)
ลองขอให้ AI สร้างชุดคำสั่งลำดับ Delay เพื่อทำให้ไฟ LED กะพริบเป็นจังหวะการเต้นของหัวใจ (ตึก... ตัก... ตึก... ตัก...)
ระบบนับเวลาแบบไม่บล็อก (SysTick Non-Blocking)
ลองขอให้ AI เขียนโค้ดกระพริบไฟแบบไม่ใช้ Simple Delay แต่ใช้ SysTick Timer เพื่อให้ MCU สามารถประมวลผลงานอื่นไปพร้อมกันได้
คู่มือการ Build และ Flash
เปิดโปรเจกต์ (Open Project): เปิดโฟลเดอร์โปรเจกต์นี้ใน IDE โดยตรง
Build & Flash: เพียงคลิกปุ่ม Build และ Flash บนแถบเครื่องมือของอินเทอร์เฟซ