- ST-LINK V2
- STM32CubeMX
- วัสดุที่จำเป็น
- แผนภาพวงจรและการเชื่อมต่อ
- การสร้างและเบิร์นโปรแกรมลงใน STM32 โดยใช้ Keil uVision และ ST-Link
- เอาต์พุตของ Keil Programmed STM32 Board
- โปรแกรม
STM32 Microcontrollers ซึ่งใช้สถาปัตยกรรม ARM Cortex Mกำลังเป็นที่นิยมและถูกนำไปใช้ในหลาย ๆ แอพพลิเคชั่นเนื่องจากคุณสมบัติต้นทุนและประสิทธิภาพ เราได้ตั้งโปรแกรม STM32F103C8 โดยใช้ Arduino IDE ในบทช่วยสอนก่อนหน้านี้ การเขียนโปรแกรม STM32 ด้วย Arduino IDE นั้นง่ายมากเนื่องจากมีไลบรารีมากมายสำหรับเซ็นเซอร์ต่างๆในการทำงานใด ๆ เราเพียงแค่ต้องเพิ่มไลบรารีเหล่านั้นในโปรแกรม นี่เป็นขั้นตอนที่ง่ายและคุณอาจไม่ได้เรียนรู้เชิงลึกเกี่ยวกับโปรเซสเซอร์ ARM ตอนนี้เรากำลังเข้าสู่ระดับถัดไปของการเขียนโปรแกรมที่เรียกว่าการเขียนโปรแกรม ARM ด้วยวิธีนี้เราสามารถทำได้ไม่เพียง แต่ปรับปรุงโครงสร้างของโค้ด แต่ยังสามารถประหยัดพื้นที่หน่วยความจำโดยไม่ใช้ไลบรารีที่ไม่จำเป็น
STMicroelectronics เปิดตัวเครื่องมือที่เรียกว่า STM32Cube MXซึ่งสร้างรหัสพื้นฐานตามอุปกรณ์ต่อพ่วงและบอร์ด STM32 ที่เลือก ดังนั้นเราจึงไม่จำเป็นต้องกังวลเกี่ยวกับการเข้ารหัสสำหรับไดรเวอร์พื้นฐานและอุปกรณ์ต่อพ่วง นอกจากนี้โค้ดที่สร้างขึ้นนี้สามารถใช้ใน Keil uVision เพื่อแก้ไขตามความต้องการ และในที่สุดโค้ดก็ถูกเบิร์นลงใน STM32 โดยใช้โปรแกรมเมอร์ ST-Link จาก STMicroelectronics
ในการกวดวิชานี้เราจะได้เรียนรู้วิธีการใช้โปรแกรม STM32F103C8 Keil uVision & STM32CubeMXด้วยการทำโครงการที่เรียบง่ายของการเชื่อมต่อปุ่มกดและไฟ LED กับคณะกรรมการยา เราจะสร้างรหัสโดยใช้ STM32Cube MX จากนั้นแก้ไขและอัปโหลดรหัสไปยัง STM32F103C8 โดยใช้ Keil uVision ก่อนที่จะลงรายละเอียดเราจะเรียนรู้เกี่ยวกับโปรแกรมเมอร์ ST-LINK และเครื่องมือซอฟต์แวร์ STM32CubeMX ก่อน
ST-LINK V2
ST-LINK / V2 เป็นบั๊กในวงจรและการเขียนโปรแกรมสำหรับ STM8 และ STM32 ครอบครัวไมโครคอนโทรลเลอร์ เราสามารถอัปโหลดรหัสไปยัง STM32F103C8 และไมโครคอนโทรลเลอร์ STM8 & STM32 อื่น ๆ โดยใช้ ST-LINK นี้ อินเทอร์เฟซโมดูลอินเทอร์เฟซแบบสายเดี่ยว (SWIM) และ JTAG / serial wire debugging (SWD) ใช้เพื่อสื่อสารกับไมโครคอนโทรลเลอร์ STM8 หรือ STM32 ที่อยู่บนบอร์ดแอปพลิเคชัน เนื่องจากแอปพลิเคชัน STM32 ใช้อินเทอร์เฟซ USB ความเร็วสูงเพื่อสื่อสารกับสภาพแวดล้อมการพัฒนาแบบบูรณาการ Atollic, IAR, Keil หรือ TASKING ดังนั้นเราจึงสามารถใช้ฮาร์ดแวร์นี้เพื่อตั้งโปรแกรมไมโครคอนโทรลเลอร์ STM 8 และ STM32 ได้
ด้านบนเป็นภาพของดองเกิล ST-LINK V2 จาก STMicroelectronics ที่รองรับอินเทอร์เฟซการดีบัก STM32 SWD แบบเต็มรูปแบบอินเทอร์เฟซ 4 สายที่เรียบง่าย (รวมถึงพลังงาน) รวดเร็วและเสถียร มีให้เลือกหลายสี ตัวเครื่องผลิตจากอลูมิเนียมอัลลอยด์ มีไฟ LED สีน้ำเงินซึ่งใช้สังเกตสถานะการทำงานของ ST-LINK ชื่อพินจะถูกทำเครื่องหมายไว้อย่างชัดเจนบนเปลือกดังที่เราเห็นในภาพด้านบน สามารถเชื่อมต่อกับซอฟต์แวร์ Keilซึ่งโปรแกรมสามารถแฟลชไปยังไมโครคอนโทรลเลอร์ STM32 ลองดูบทช่วยสอนนี้ว่าโปรแกรมเมอร์ ST-LINK นี้สามารถใช้เพื่อตั้งโปรแกรมไมโครคอนโทรลเลอร์ STM32ได้อย่างไร ภาพด้านล่างแสดงหมุดของโมดูล ST-LINK V2
หมายเหตุ: เมื่อเชื่อมต่อ ST-Link กับคอมพิวเตอร์เป็นครั้งแรกเราจำเป็นต้องติดตั้งไดรเวอร์อุปกรณ์ ไดรเวอร์อุปกรณ์สามารถพบได้ในลิงค์นี้ตามระบบปฏิบัติการของคุณ
STM32CubeMX
เครื่องมือ STM32CubeMX เป็นส่วนหนึ่งของ STMicroelectronics STMCube เครื่องมือซอฟต์แวร์นี้ช่วยให้การพัฒนาเป็นเรื่องง่ายโดยลดความพยายามในการพัฒนาเวลาและค่าใช้จ่าย STM32Cube ประกอบด้วย STM32CubeMX ซึ่งเป็นเครื่องมือกำหนดค่าซอฟต์แวร์กราฟิกที่อนุญาตให้สร้างรหัสเริ่มต้น C โดยใช้ตัวช่วยสร้างกราฟิก โค้ดนั้นสามารถใช้ในสภาพแวดล้อมการพัฒนาต่างๆเช่น keil uVision, GCC, IAR เป็นต้นคุณสามารถดาวน์โหลดเครื่องมือนี้ได้จากลิงค์ต่อไปนี้
STM32CubeMX มีคุณสมบัติดังต่อไปนี้
- ตรึงตัวแก้ความขัดแย้ง
- ตัวช่วยในการตั้งค่านาฬิกาต้นไม้
- เครื่องคำนวณการใช้พลังงาน
- ยูทิลิตี้ที่ดำเนินการกำหนดค่าอุปกรณ์ต่อพ่วง MCU เช่นหมุด GPIO, USART เป็นต้น
- ยูทิลิตี้ที่ทำการกำหนดค่าอุปกรณ์ต่อพ่วง MCU สำหรับสแต็กมิดเดิลแวร์เช่น USB, TCP / IP เป็นต้น
วัสดุที่จำเป็น
ฮาร์ดแวร์
- STM32F103C8 Blue Pill board
- ST-LINK V2
- ปุ่มกด
- LED
- เขียงหั่นขนม
- สายจัมเปอร์
ซอฟต์แวร์
- เครื่องมือสร้างรหัส STM32CubeMX (ลิงค์)
- Keil uVision 5 (ลิงค์)
- ไดรเวอร์สำหรับ ST-Link V2 (ลิงค์)
แผนภาพวงจรและการเชื่อมต่อ
ด้านล่างนี้เป็นแผนภาพวงจรเพื่อเชื่อมต่อLED กับบอร์ด STM32โดยใช้ปุ่มกด
การเชื่อมต่อระหว่าง ST-LINK V2 และ STM32F103C8
ที่นี่บอร์ด STM32 Blue Pill ใช้พลังงานจาก ST-LINK ซึ่งเชื่อมต่อกับพอร์ต USB ของคอมพิวเตอร์ ดังนั้นเราจึงไม่จำเป็นต้องจ่ายไฟให้กับ STM32 แยกกัน ตารางด้านล่างแสดงการเชื่อมต่อระหว่าง ST-Link และ Blue pill board
STM32F103C8 |
ST-Link V2.0 |
GND |
GND |
SWCLK |
SWCLK |
SWDIO |
SWDIO |
3V3 |
3.3V |
LED และปุ่มกด
LEDใช้เพื่อระบุเอาต์พุตจากบอร์ด Blue Pill เมื่อกดปุ่ม ขั้วบวกของ LED เชื่อมต่อกับพิน PC13 ของ Blue Pill board และขั้วลบต่อสายดิน
กดปุ่มเชื่อมต่อกับให้ข้อมูลกับ PA1 ขาของคณะกรรมการยาสีน้ำเงิน เราต้องใช้ตัวต้านทานแบบดึงขึ้นที่มีค่า 10k เนื่องจากพินอาจลอยโดยไม่มีอินพุตใด ๆ เมื่อปล่อยปุ่ม ปลายด้านหนึ่งของปุ่มกดเชื่อมต่อกับกราวด์และปลายอีกด้านหนึ่งเพื่อพิน PA1 และตัวต้านทานแบบดึงขึ้น 10k ยังเชื่อมต่อกับบอร์ด Blue Pill 3.3V
การสร้างและเบิร์นโปรแกรมลงใน STM32 โดยใช้ Keil uVision และ ST-Link
ขั้นตอนที่ 1: -ก่อนอื่นให้ติดตั้งไดรเวอร์อุปกรณ์ทั้งหมดสำหรับ ST-LINK V2, เครื่องมือซอฟต์แวร์ STM32Cube MX & Keil uVision และติดตั้งแพ็คเกจที่จำเป็นสำหรับ STM32F103C8
ขั้นตอนที่ 2: -ขั้นตอนที่สองคือเปิด >> STM32Cube MX
ขั้นตอนที่ 3: -จากนั้นคลิกที่ โครงการใหม่
ขั้นตอนที่ 4: -หลังจากนั้นค้นหาและเลือกไมโครคอนโทรลเลอร์STM32F103C8ของเรา
ขั้นตอนที่ 5: -ตอนนี้ร่างขาออกของ STM32F103C8ปรากฏขึ้นที่นี่เราสามารถตั้งค่าการกำหนดค่าพินได้ นอกจากนี้เรายังสามารถเลือกพินของเราในส่วนอุปกรณ์ต่อพ่วงตามโครงการของเรา
ขั้นตอนที่ 6: -คุณสามารถคลิกที่พินได้โดยตรงและรายการจะปรากฏขึ้นตอนนี้เลือกการกำหนดค่าพินที่ต้องการ
ขั้นตอนที่ 7: -สำหรับโครงการของเราเราได้เลือกPA1 เป็น GPIO INPUT, PC13 เป็น GPIO OUTPUT & SYS debug เป็น SERIAL WIREที่นี่มีเพียงเราเชื่อมต่อพิน ST-LINK SWCLK & SWDIO เท่านั้น ได้รับการแต่งตั้งและกำหนดค่าหมุดปรากฏในสีเขียวคุณสามารถสังเกตได้ในภาพด้านล่าง
ขั้นตอนที่ 8: -ถัดไปใต้แท็บการ กำหนดค่า เลือก GPIO เพื่อตั้งค่าการกำหนดค่าพิน GPIO สำหรับพินที่เราเลือก
ขั้นตอนที่ 9: -ถัดไปในกล่องการกำหนดค่าพินนี้เราสามารถกำหนดค่า User Label สำหรับพินที่เราใช้นั่นคือชื่อพินที่ผู้ใช้กำหนด
ขั้นตอนที่ 10: -หลังจากคลิกที่ โครงการ >> สร้างรหัส
ขั้นตอนที่ 11: -ตอนนี้กล่องโต้ตอบการตั้งค่าโครงการจะปรากฏขึ้น ในกล่องนี้ให้เลือกชื่อโครงการและที่ตั้งของคุณและเลือกสภาพแวดล้อมการพัฒนาเรากำลังใช้ Keil ดังนั้นเลือกMDK-ARMv5 เป็น IDE
ขั้นตอนที่ 12: -ถัดไปภายใต้ รหัส Generator แท็บ, เลือก คัดลอกเฉพาะไฟล์ไลบรารีที่จำเป็น แล้วคลิกตกลง
ขั้นตอนที่ 13: -ตอนนี้กล่องโต้ตอบการสร้างรหัสจะปรากฏขึ้น เลือก เปิดโครงการ เพื่อเปิดโครงการโดยอัตโนมัติรหัสที่สร้างขึ้นใน Keil uvsion
ขั้นตอนที่ 14: -ตอนนี้เครื่องมือ Keil uVision จะเปิดขึ้นพร้อมกับรหัสที่เราสร้างขึ้นใน STM32CubeMx ด้วยชื่อโปรเจ็กต์เดียวกันกับไลบรารีและรหัสที่จำเป็นซึ่งกำหนดค่าสำหรับพินที่เราเลือก
ขั้นตอนที่ 15: -ตอนนี้เราต้องรวมลอจิกเพื่อดำเนินการบางอย่างที่ LED เอาต์พุต (พิน PC13) เมื่อกดปุ่มและปล่อยที่อินพุต GPIO (พิน PA1) ดังนั้นเลือกโปรแกรม main.c เราที่จะรวมรหัสบางอย่าง
ขั้นตอนที่ 16: -ตอนนี้เพิ่มรหัสใน while (1) loop ดูภาพด้านล่างที่ฉันเน้นส่วนนั้นเพื่อเรียกใช้รหัสอย่างต่อเนื่อง
ในขณะที่ (1) {ถ้า (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => กดปุ่ม DETECTS {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // เพื่อให้เอาต์พุตสูงเมื่อกดปุ่ม d} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // เพื่อให้เอาต์พุตต่ำเมื่อกดปุ่ม}}
ขั้นตอนที่ 17: -หลังจากแก้ไขโค้ดเสร็จแล้วให้คลิกไอคอน ตัวเลือกสำหรับเป้าหมาย ใต้แท็บดีบักเลือก ST-LINK Debugger
นอกจากนี้คลิกที่ปุ่ม การตั้งค่า จากนั้นภายใต้แท็บ ดาวน์โหลดแฟลชให้เลือก ช่องทำเครื่องหมาย รีเซ็ตและเรียกใช้ แล้วคลิก 'ตกลง'
ขั้นตอนที่ 18: -คลิกที่ไอคอนสร้างใหม่เพื่อสร้างไฟล์เป้าหมายทั้งหมดใหม่
ขั้นตอนที่ 19: -ตอนนี้คุณสามารถเสียบ ST-LINK เข้ากับคอมพิวเตอร์พร้อมกับการเชื่อมต่อวงจรและคลิกที่ไอคอนดาวน์โหลดหรือกด F8 เพื่อแฟลช STM32F103C8ด้วยรหัสที่คุณสร้างและแก้ไข
ขั้นตอนที่ 20: -คุณสามารถสังเกตเห็นไฟกะพริบที่ด้านล่างของหน้าต่าง keil uVision
เอาต์พุตของ Keil Programmed STM32 Board
ตอนนี้เมื่อเรากดปุ่มกด LED จะเปิดและเมื่อเราปล่อย LED จะดับลง
โปรแกรม
ส่วนหลักที่เราได้เพิ่มไว้ในโปรแกรมที่สร้างขึ้นแสดงอยู่ด้านล่าง โค้ดด้านล่างนี้จะต้องรวมอยู่ในโปรแกรม while (1 ) ของ main.c ที่ สร้างโดย STM32CubeMX คุณสามารถกลับไปที่ขั้นตอนที่ 15 ถึงขั้นตอนที่ 17 เพื่อเรียนรู้ว่าควรเพิ่มในโปรแกรม main.c อย่างไร
ในขณะที่ (1) {ถ้า (HAL_GPIO_ReadPin (BUTN_GPIO_Port, BUTN_Pin) == 0) // => กดปุ่ม DETECTS {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 1); // เพื่อให้เอาต์พุตสูงเมื่อกดปุ่ม d} else {HAL_GPIO_WritePin (LEDOUT_GPIO_Port, LEDOUT_Pin, 0); // เพื่อให้เอาต์พุตต่ำเมื่อกดปุ่ม}}
กระบวนการที่สมบูรณ์ของการสร้างและโครงการการอัปโหลดลงในกระดาน STM32 ยังมีการอธิบายในวิดีโอที่ได้รับในตอนท้าย นอกจากนี้รหัสที่สมบูรณ์ของไฟล์ main.cจะได้รับด้านล่างรวมถึงรหัสที่กำหนดด้านบน
นอกจากนี้คุณสามารถค้นหาโครงการ STM32 ทั้งหมดของเราได้ที่นี่