- วัสดุที่จำเป็น
- แผนภาพวงจรและการเชื่อมต่อ
- การเขียนโปรแกรม STM32 สำหรับ LCD โดยใช้ Arduino
- อัปโหลดโปรแกรมไปยัง STM32F103C8T6
สำหรับโครงการไมโครคอนโทรลเลอร์ใด ๆ การเชื่อมต่อหน่วยแสดงผลกับมันจะทำให้โครงการง่ายขึ้นและน่าสนใจสำหรับผู้ใช้ในการโต้ตอบด้วย หน่วยแสดงผลที่ใช้บ่อยที่สุดสำหรับไมโครคอนโทรลเลอร์คือจอแสดงผลตัวเลข 16 × 2 Alpha จอแสดงผลประเภทนี้ไม่เพียง แต่มีประโยชน์ในการแสดงข้อมูลที่สำคัญให้กับผู้ใช้เท่านั้น แต่ยังสามารถทำหน้าที่เป็นเครื่องมือดีบั๊กในระหว่างขั้นตอนการพัฒนาเบื้องต้นของโครงการ ดังนั้นในบทช่วยสอนนี้เราจะเรียนรู้วิธีที่เราสามารถเชื่อมต่อจอ LCD 16 × 2 กับ บอร์ดพัฒนาSTM32F103C8T6 STM32และตั้งโปรแกรมโดยใช้ Arduino IDE สำหรับผู้ที่คุ้นเคยกับ Arduino บทช่วยสอนนี้จะเป็นการเดินเล่นเค้กเนื่องจากทั้งคู่มีความคล้ายคลึงกันมาก หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ STM32 Blue Pill Board ให้ทำตามบทแนะนำการเริ่มต้นใช้งานของเรา
วัสดุที่จำเป็น
- STM32 Blue Pill Development Board
- จอ LCD 16 × 2
- โปรแกรมเมอร์ FTDI
- การเชื่อมต่อสายไฟ
- LCD
แนะนำสั้น ๆ เกี่ยวกับจอแสดงผล LCD แบบ Dot matrix 16 × 2
อย่างที่บอกไปก่อนหน้านี้ Energia IDE มีไลบรารีที่สวยงามซึ่งทำให้การเชื่อมต่อกับชิ้นเค้กดังนั้นจึงไม่จำเป็นต้องรู้อะไรเกี่ยวกับโมดูลการแสดงผล แต่มันจะไม่น่าสนใจที่จะแสดงสิ่งที่เราใช้ !!
ชื่อ 16 × 2 หมายความว่าจอแสดงผลมี 16 คอลัมน์และ 2 แถวซึ่งรวมกัน (16 * 2) เป็น 32 ช่อง กล่องเดียวจะมีลักษณะดังนี้ในภาพด้านล่าง
กล่องเดียวมี 40 พิกเซล (จุด) โดยมีลำดับเมทริกซ์เป็น 5 แถวและ 8 คอลัมน์โดย 40 พิกเซลเหล่านี้รวมกันเป็นหนึ่งอักขระ ในทำนองเดียวกันสามารถแสดงอักขระ 32 ตัวโดยใช้กล่องทั้งหมด ตอนนี้ให้ดูที่ pinouts
LCD มีทั้งหมด 16 พินดังที่แสดงไว้ด้านบนสามารถแบ่งออกเป็นสี่กลุ่มดังนี้
พินต้นทาง (1, 2 และ 3): พินเหล่านี้ให้แหล่งพลังงานและระดับคอนทราสต์สำหรับจอแสดงผล
พินควบคุม (4, 5 และ 6): พินเหล่านี้ตั้งค่า / ควบคุมรีจิสเตอร์ใน IC เชื่อมต่อ LCD (สามารถดูข้อมูลเพิ่มเติมได้ในลิงค์ด้านล่าง)
หมุดข้อมูล / คำสั่ง (7 ถึง 14): หมุดเหล่านี้ให้ข้อมูลของข้อมูลที่ควรแสดงบนจอ LCD
หมุด LED (15 และ 16): หมุดเหล่านี้ใช้เพื่อเรืองแสงด้านหลังของ LCD หากจำเป็น (อุปกรณ์เสริม)
จาก 16 พินทั้งหมดนี้จำเป็นต้องใช้พิน 10 พินเพื่อการทำงานที่เหมาะสมของ LCD หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับจอ LCD เหล่านี้ให้ข้ามไปที่บทความ LCD 16x2 นี้
แผนภาพวงจรและการเชื่อมต่อ
แผนภาพวงจรไปยังอินเทอร์เฟซ16 * 2 Dot matrix LCD พร้อม STM32F103C8T6 STM32 Blue Pill boardแสดงไว้ด้านล่าง มันถูกสร้างขึ้นโดยใช้ซอฟต์แวร์ Fritzing
อย่างที่คุณเห็นการเชื่อมต่อที่สมบูรณ์นั้นทำผ่านเขียงหั่นขนม เราจำเป็นต้องมีคณะกรรมการ FTDI การเขียนโปรแกรมไมโครคอนโทรลเลอร์ คล้ายกับบทช่วยสอนก่อนหน้านี้เราได้ต่อบอร์ด FTDI เข้ากับ STM32 Vcc และพินกราวด์ของโปรแกรมเมอร์ FDTI เชื่อมต่อกับขา 5V และขากราวด์ของ STM32 ตามลำดับ ใช้เพื่อจ่ายไฟให้กับบอร์ด STM32 และ LCD เนื่องจากทั้งสองสามารถรับได้ + 5V ขา Rx และ Tx ของบอร์ด FTDI เชื่อมต่อกับขา A9 และ A10 ของ STM32 เพื่อให้เราสามารถตั้งโปรแกรมบอร์ดได้โดยตรงโดยไม่ต้องใช้บูตโหลดเดอร์
ถัดไป LCD จะต้องเชื่อมต่อกับบอร์ด STM32 เราจะใช้LCD ในโหมด 4 บิตดังนั้นเราต้องเชื่อมต่อพินบิตข้อมูล 4 ตัว (DB4 ถึง DB7) และพินควบคุมสองตัว (RS และ EN) เข้ากับบอร์ด STM32 ดังที่แสดงในวงจรเชื่อมต่อLCD STM32F103C8T6แผนภาพด้านบน นอกจากนี้ตารางด้านล่างจะช่วยคุณในการเชื่อมต่อ
หมายเลขพิน LCD |
ชื่อพิน LCD |
ชื่อพิน STM32 |
1 |
พื้นดิน (Gnd) |
พื้นดิน (G) |
2 |
VCC |
5V |
3 |
วี |
พื้นดิน (G) |
4 |
ลงทะเบียนเลือก (RS) |
PB11 |
5 |
อ่าน / เขียน (RW) |
พื้นดิน (G) |
6 |
เปิดใช้งาน (EN) |
PB10 |
7 |
บิตข้อมูล 0 (DB0) |
ไม่มีการเชื่อมต่อ (NC) |
8 |
บิตข้อมูล 1 (DB1) |
ไม่มีการเชื่อมต่อ (NC) |
9 |
บิตข้อมูล 2 (DB2) |
ไม่มีการเชื่อมต่อ (NC) |
10 |
บิตข้อมูล 3 (DB3) |
ไม่มีการเชื่อมต่อ (NC) |
11 |
บิตข้อมูล 4 (DB4) |
PB0 |
12 |
บิตข้อมูล 5 (DB5) |
PB1 |
13 |
บิตข้อมูล 6 (DB6) |
พีซี 13 |
14 |
บิตข้อมูล 7 (DB7) |
พีซี 14 |
15 |
LED เป็นบวก |
5V |
16 |
LED เชิงลบ |
พื้นดิน (G) |
เมื่อเชื่อมต่อเสร็จแล้วเราสามารถเปิด Arduino IDE และเริ่มเขียนโปรแกรมได้
การเขียนโปรแกรม STM32 สำหรับ LCD โดยใช้ Arduino
อย่างที่บอกว่าในการกวดวิชานี้เราจะใช้Arduino IDE ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์แต่โดยค่าเริ่มต้น Arduino IDE จะไม่ได้ติดตั้งบอร์ด STM32 ดังนั้นเราจึงต้องดาวน์โหลดแพ็คเกจและเตรียม Arduino IDE สำหรับสิ่งเดียวกัน นี่คือสิ่งที่เราทำในบทช่วยสอนก่อนหน้าของเราในการเริ่มต้นใช้งาน STM32F103C8T6 โดยใช้ Arduino IDE ดังนั้นหากคุณยังไม่ได้ติดตั้งแพ็คเกจที่จำเป็นให้กลับไปที่บทช่วยสอนนี้และทำตามก่อนที่จะดำเนินการต่อที่นี่
เมื่อติดตั้งบอร์ด STM32 ใน Arduino IDE แล้วเราสามารถเริ่มการเขียนโปรแกรมได้ โปรแกรมจะคล้ายกับที่ของคณะกรรมการ Arduino มีเพียงสิ่งเดียวที่จะเปลี่ยนเป็นชื่อพิตั้งแต่สัญลักษณ์ที่แตกต่างกันสำหรับSTM32 และ Arduino โปรแกรมที่สมบูรณ์จะได้รับในตอนท้ายของหน้านี้ แต่เพื่ออธิบายโปรแกรมฉันได้แยกมันออกเป็นตัวอย่างเล็ก ๆ ที่มีความหมายดังที่แสดงด้านล่าง
ข้อดีอย่างหนึ่งของการใช้ Arduino ในการเขียนโปรแกรมไมโครคอนโทรลเลอร์ของเราคือ Arduino มีไลบรารีสำเร็จรูปสำหรับเซ็นเซอร์และแอคชูเอเตอร์ที่มีชื่อเสียงเกือบทุกตัว ดังนั้นเราจึงเริ่มโปรแกรมของเราโดยรวมไลบรารี LCDซึ่งทำให้การเขียนโปรแกรมง่ายขึ้นมาก
# รวม
ในบรรทัดถัดไปเราต้องระบุหมุด GPIO ของ STM32 ที่เราเชื่อมต่อกับส่วนควบคุมจอแสดงผลLCDและสายข้อมูล ในการทำเช่นนี้เราต้องตรวจสอบฮาร์ดแวร์ของเราเพื่อความสะดวกคุณยังสามารถอ้างถึงตารางที่ให้ไว้ด้านบนซึ่งแสดงชื่อพินของ LCD เทียบกับพิน GPIO ของ STM32 หลังจากพูดถึงหมุดแล้วเราสามารถเริ่มต้น LCD โดยใช้ฟังก์ชัน LiquidCrystal เรายังตั้งชื่อ LCD ของเราว่า " lcd " ตามที่แสดงด้านล่าง
const int rs = PB11, th = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; // ระบุชื่อพินด้วย LCD เชื่อมต่อกับ LiquidCrystal lcd (rs, en, d4, d5, d6, d7); // เริ่มต้น LCD
ต่อไปเราจะเข้าสู่ฟังก์ชั่น การตั้งค่า ก่อนอื่นเราจะกล่าวถึงประเภทของ LCD ที่เราใช้ เนื่องจากเป็น LCD 16 * 2 เราจึงใช้เส้น lcd.begin (16,2) รหัสภายในฟังก์ชัน การตั้งค่าโมฆะ จะถูกดำเนินการเพียงครั้งเดียว ดังนั้นเราจึงใช้มันเพื่อแสดงข้อความแนะนำที่ปรากฏบนหน้าจอเป็นเวลา 2 วินาทีจากนั้นจะถูกล้าง หากต้องการระบุตำแหน่งที่ข้อความต้องปรากฏเราใช้ฟังก์ชัน lcd.setcursor และในการพิมพ์ข้อความเราใช้ฟังก์ชัน lcd.print ตัวอย่างเช่น lcd.setCursor (0,0) จะตั้งค่าเคอร์เซอร์ที่แถวแรกและคอลัมน์แรกที่เราพิมพ์“ Interfacing LCD ” และฟังก์ชัน lcd.setCursor (0,1) เลื่อนเคอร์เซอร์ไปที่แถวที่สองคอลัมน์แรกที่เราพิมพ์บรรทัด“ CircuitDigest ”
การตั้งค่าเป็นโมฆะ () {lcd.begin (16, 2); // เรากำลังใช้ LCD 16 * 2 LCD. setCursor (0, 0); // ที่แถวแรกคอลัมน์แรก lcd.print ("Interfacing LCD"); // พิมพ์ lcd.setCursor นี้ (0, 1); // ที่ secound row คอลัมน์แรก lcd.print ("- CircuitDigest"); // พิมพ์ความล่าช้านี้ (2000); // รอสองวินาที lcd.clear (); // ล้างหน้าจอ}
หลังจากแสดงข้อความแนะนำเราจะกดโปรแกรมเป็นเวลา 2 วินาทีโดยสร้างการหน่วงเวลาเพื่อให้ผู้ใช้สามารถอ่านข้อความแนะนำได้ การหน่วงเวลานี้สร้างขึ้นโดย ความล่าช้าของ บรรทัด (2000) โดยที่ 2000 คือค่าความล่าช้าในหน่วยมิลลิวินาที หลังจากความล่าช้าเราจะล้าง LCD โดยใช้ ฟังก์ชัน lcd.clear () ซึ่งจะล้าง LCD โดยการลบข้อความทั้งหมดบน LCD
สุดท้ายภายใน ห่วงโมฆะ เราแสดง“STM32 บลูยา” ในบรรทัดแรกและความคุ้มค่าของการวินาทีในบรรทัดที่สอง ค่าของวินาทีสามารถหาได้จากฟังก์ชัน มิลลิ วินาที () มิลลิวินาที () เป็นตัวตั้งเวลาที่ได้รับการเพิ่มทางด้านขวาจากเวลาที่ MCU เป็นขับเคลื่อน ค่านี้อยู่ในรูปของมิลลิวินาทีดังนั้นเราจึงหารด้วย 1,000 ก่อนที่จะแสดงบน LCD ของเรา
โมฆะลูป () { lcd.setCursor (0, 0); // ในแถวแรกคอลัมน์แรก lcd.print ("STM32 -Blue Pill"); // พิมพ์ lcd.setCursor นี้(0, 1); // ที่secound แถวคอลัมน์แรกlcd.print (มิลลิวินาที () / 1000); // พิมพ์ค่า secounds }
อัปโหลดโปรแกรมไปยัง STM32F103C8T6
ตามที่กล่าวไว้ในย่อหน้าข้างต้นคุณควรจะสังเกตเห็นผลลัพธ์ได้ทันทีที่อัปโหลดโค้ด แต่โปรแกรมนี้จะไม่ทำงานในครั้งต่อไปเมื่อคุณเปิดบอร์ดเนื่องจากบอร์ดยังอยู่ในโหมดการเขียนโปรแกรม ดังนั้นทันทีที่โปรแกรมจะถูกอัปโหลดจัมเปอร์ในการบูต 0 ควรจะเปลี่ยนกลับไปเป็น 0 ตำแหน่งเป็นที่แสดงด้านล่างนอกจากนี้เนื่องจากโปรแกรมถูกอัปโหลดไปยังบอร์ด STM32 แล้วเราจึงไม่จำเป็นต้องใช้บอร์ด FTDI และการตั้งค่าทั้งหมดสามารถใช้พลังงานจากพอร์ต micro-USB ของบอร์ด STM32 ได้ตามที่แสดงด้านล่าง
นี่เป็นเพียงโครงการเชื่อมต่อที่เรียบง่ายเพื่อช่วยในการใช้จอ LCD กับบอร์ด STM32 แต่คุณสามารถใช้สิ่งนี้เพื่อสร้างโครงการที่ยอดเยี่ยมได้ หวังว่าคุณจะเข้าใจบทช่วยสอนและเรียนรู้สิ่งที่เป็นประโยชน์จากมัน หากคุณประสบปัญหาใด ๆ ในการทำให้มันใช้งานได้โปรดใช้ส่วนความคิดเห็นเพื่อโพสต์ปัญหาหรือใช้ฟอรัมสำหรับคำถามทางเทคนิคอื่น ๆ การทำงานที่สมบูรณ์ของจอ LCD ที่มี STM32 ยังสามารถพบได้เป็นวิดีโอได้รับด้านล่าง