STM32F407VET6 STM32 เป็นชิปที่สร้างโดย STMicroelectronics ภายในใช้ CPU ARM 32bit Cortex – M4 ซึ่งออกแบบมาเพื่อไมโครคอนโทรลเลอร์โดยเฉพาะ ความถี่ CPU สูงสุด 168MHz มีรอม 64KB และ SRAM 192+4 KB มี GPIO ให้ใช้ 82 ขา ADC 12bit จำนวน 16 ช่อง รองรับบัส SPI I2C UART UART และ CAN ใช้แรงดันไฟฟ้าได้ตั้งแต่ 1.8V ถึง 3.6V
คอมไพล์เลอร์ที่นิยมใช้งานกันได้แก่ STM32CubeIDE , AC6 System Workbench for STM32 , ARM Keil MDK , ARM Mbed Online Compiler , Arm Mbed Studio และ Arduino IDE โดยในบทความนี้ จะแสดงการใช้งานบอร์ด STM32 กับ Arduino IDE โดยใช้ระบบปฏิบัติการ Windows 10
ขั้นตอนการทํางาน
1 : เพิ่มบอร์ด STM32 ลงใน Arduino IDE
ติดตั้งบอร์ด STM32 ลงใน Arduino IDE ตามขั้นตอนลิงค์ด้านล่าง
2 : ติดตั้งไดร์เวอร์ ST-Link V2
ติดตั้งไดร์เวอร์ ST-Link V2 เพื่ออัพโหลดโปรแกรมและดีบักไมโครคอนโทรลเลอร์ ตามขั้นตอนลิงค์ด้านล่าง
3 : เชื่อมต่อสาย ST-Link V2 กับ STM32F407VET6
ST-Link V2 – JTAG connector:
SWCLK --- Pin 9, PA14/TCK/JTMS_SWCLK
SWDIO --- Pin 7, PA13/TMS/JTMS_SWDIO
GND ----- Pin 4, GND
3.3V ---- Pin 1, 3.3V
JTAG connector pinout:
+-----+
| 1 2| Pin 1 = 3.3V
| 3 4| Pin 4 = GND
| 5 6|
_| 7 8| Pin 7 = SWDIO
| 9 10| Pin 9 = SWCLK
|_ 11 12|
|13 14|
|15 16|
|17 18|
|19 20|
+-----+
4 : อัพโหลดโค้ด STM32
ในตัวอย่างนี้ เราจะมาทดลองสั่งงาน เปิด/ปิด หลอดไฟ LED2 หรือ D3 ที่เชื่อมต่อกับ ขา PA7 ที่มาพร้อมกับบอร์ด STM32 อยู่แล้ว
เปิดโปรแกรม Arduino IDE เขียนโปรแกรมและอัพโหลดโค้ดด้านล่างนี้ ไปที่ STM32
void setup() {
pinMode(PA7, OUTPUT);
}
void loop() {
digitalWrite(PA7, HIGH);
delay(1000);
digitalWrite(PA7, LOW);
delay(1000);
}
ไปที่ Tools -> Board -> STM32F4 Boards (STM32duino.com) -> Generic STM32F407V series
ไปที่ Tools -> Upload method: -> STLink
คลิกที่ Upload
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง และ บรรทัดสุดท้าย ด้านล่างสุดขึ้นคำว่า Application started. แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ด STM32 ได้สำเร็จแล้ว
ผลลัพธ์การทำงานคือ ไฟ LED2 หรือ D3 กระพริบ แสดงว่า การอัพโหลดโค้ด โปรแกรมแรกของคุณ กับ STM32 สำเร็จแล้ว
5 : อธิบายโค้ด
ส่วนประกอปของโปรแกรม หรือ ที่เรียกว่า Sketch มี 2 ส่วน คือ ฟังก์ชั่น setup และ ฟังก์ชั่น loop สามารถอธิบายรูปแบบการทำงานของโปรแกรมได้ดังนี้
เมื่อเริ่มต้นทำงาน STM32 จะทำตามคำสั่งต่างๆที่อยู่ในฟังก์ชัน “setup” เป็นจำนวน 1 รอบ โดยคำสั่งต่างๆที่จะเขียนในฟังก์ชันนี้ ส่วนมากจะเป็นการกำหนดค่าเริ่มต้น การกำหนดหน้าที่ของแต่ละขา หรือคำสั่งต่างๆที่ต้องการเรียกใช้เพียงแค่ครั้งแรกครั้งเดียว หลังจากที่จบฟังก์ชัน “setup” จะไม่มีการย้อนกลับมาทำคำสั่งในนี้อีก ส่วนฟังก์ชัน loop จะทำงานต่อจาก setup โดยใน loop นี้จะเป็นการทำตามคำสั่งแบบวนซ้ำ คือ ทำงานตามคำสั่งบรรทัดแรกไปเรื่อยๆจนถึงบรรทัดสุดท้าย แล้ว วน กลับมาเริ่มทำที่บรรทัดแรกใหม่อีกครั้ง เป็นเช่นนี้ไปเรื่อยๆ
อธิบายการทำงานของโปรแกรม
จุดเริ่มต้นทำงานของ ฟังก์ชัน setup โดย void หมายความว่าไม่มีการคืนค่าใดๆ กลับออกไปจากฟังก์ชั่น และไม่มีการรับค่าใดๆ เข้ามาในฟังก์ชัน ซึ่งส่วนนี้จะทำงานครั้งแรก เพียงครั้งเดียวเท่านั้น เป็นส่วนคำสั่งหรือสเตตเมนต์ (Statement) จะเป็นส่วนที่เก็บคำสั่งต่างๆ ที่จะให้โปรแกรมเรื่มต้นในการทำงาน ในการตั้งค่า กำหนดค่า ต่างๆ โดยเริ่มต้นด้วยเครื่องหมายปีกกาเปิด {
void setup() {
กำหนดให้โหมดทำงานของ ขา PA7 ของ STM32 เป็นการทำงานแบบเอาท์พุท คือ ส่งออกข้อมูล
pinMode(PA7, OUTPUT);
จบด้วยเครื่องหมายปีกกาปิด } ของฟังก์ชั่น setup
}
จุดเริ่มต้นทำงานของ ฟังก์ชัน loop โดยเริ่มต้นด้วยเครื่องหมายปีกกาเปิด {
void loop() {
คำสั่ง digitalWrite(PA7, HIGH); ใช้ในการควบคุม LED2 โดยให้ขา PA7 ส่งเอาท์พุทออกเป็น HIGH = ไฟติด
digitalWrite(PA7, HIGH);
คำสั่งหน่วงเวลา delay(1000); โดย 1000 คือ 1000 มิลลิวินาที หรือ 1 วินาที
delay(1000);
คำสั่ง digitalWrite(PA7, LOW); ใช้ในการควบคุม LED2 โดยให้ขา PA7 ส่งเอาท์พุทออกเป็น LOW = ไฟดับ
digitalWrite(PA7, LOW);
คำสั่งหน่วงเวลา delay(1000); โดย 1000 คือ 1000 มิลลิวินาที หรือ 1 วินาที
delay(1000);
จบด้วยเครื่องหมายปีกกาปิด } ของฟังก์ชั่น loop
}