การใช้งานพอร์ตสื่อสาร UART

Download all demo files: UART.7z

บทนำ

เพื่อให้ระบบสมองกลฝังตัว สามารถใช้งานได้หลากหลายประเภท ปัจจุบันนี้ Microcontroller จึงสามารถเชื่อมต่อกับอุปกรณ์ภายนอกชนิดต่างๆ เพื่อรับและส่งข้อมูลไปยังโลกภายนอกได้มากขึ้น

รูป 1-1 การสื่อสารระหว่างระบบสมองกลองฝังตัวกับอุปกรณ์ภายนอก

รูป 1-1 การสื่อสารระหว่างระบบสมองกลองฝังตัวกับอุปกรณ์ภายนอก

การสื่อสารระหว่าง Microcontroller กับอุปกรณ์ภายนอกต่างๆ สามารถแบ่งได้สองชนิดคือ

  • การสื่อสารแบบขนาน (Parallel Communication) ทำได้โดยการส่งข้อมูลจากผู้ส่ง (Transmitter) ไปยังผู้รับ (Receiver) ออกมาทีละ 1 Byte หรือ 8 Bits  ซึ่งอาจมี Bit เพิ่มเติมสำหรับควบคุมการสื่อสาร ซึ่งมีข้อดีคือ อัตราการรับส่งข้อมูลสูง ตัวอย่างการใช้งาน STM32F4DISCOVERY กับการสื่อสารแบบขนาน เช่น การเชื่อมต่อจอแสดงผล LCD การเชื่อมต่อกล้อง และการเชื่อมต่อกับหน่วยความจำเสริม (External RAM Memory) ตัวกลางระหว่างอุปกรณ์ทั้งสองเครื่องต้องใช้กลุ่มสายส่งเป็นจำนวนมาก (Bus)  จึงไม่เหมาะสำหรับงานที่ต้องใช้อุปกรณ์ภายนอกเป็นจำนวนมาก
  • การสื่อสารแบบอนุกรม (Serial Communication) เป็นการรับส่งออกมาทีละ Bit จึงมีความล่าช้ากว่าการสื่อสารแบบขนาน อย่างก็ไรตาม ตัวกลางสำหรับการสื่อสารอาจจะใช้สายส่งเพียงคู่เดียว จึงมีค่าใช้จ่ายน้อยกว่าและทำให้อุปกรณ์มีขนาดเล็ก นอกจากนี้ การสื่อสารแบบอนุกรมสามารถสื่อสารแบบเครือข่ายได้ จึงเป็นที่นิยมมากกว่า

STM32F4DISCOVERY มีโมดูลการสื่อสารหลายชนิด ได้แก่ UART, I2C, SPI, USB, CAN Bus และ Ethernet เป็นต้น ในบทนี้จะกล่าวถึง โมดูลการสื่อสารแบบ UART

รู้จักกับการสื่อสารแบบ UART

UART ย่อมาจากคำว่า Universal Asynchronous Receiver Transmitter เป็นการเชื่อมต่อและสื่อสารข้อมูลอนุกรมกับอุปกรณ์ต่างๆ เช่น คอมพิวเตอร์, RFID, GPS, GSM Module, Wifi Module เป็นต้น

ข้อดีของการใช้ Asynchronous คือสามารถสื่อสารแบบ Full duplex กล่าวคือสามารถรับและส่งข้อมูลระหว่าง Receiver และ Transmitter ได้ในเวลาเดียวกัน นอกจากนี้ ไม่ต้องใช้สายสัญญาณ Clock เพื่อกำหนดจังหวะการรับส่งข้อมูล แต่มีการกำหนดรูปแบบ Format หรือ Protocol การรับส่งข้อมูลขึ้นมาแทน และอาศัยการกำหนดความเร็วของการรับส่งข้อมูลให้เท่ากัน

รูป1-2 รูปแบบการสื่อสารแบบ Universal Asynchronous Receiver Transmitter [1]

รูป1-2 รูปแบบการสื่อสารแบบ Universal Asynchronous Receiver Transmitter [1]

จากรูป 1-2 แสดงรูปแบบการสื่อสารของ UART โดยผู้ใช้ต้องกำหนดคุณสมบัติเหล่านี้ให้เหมือนกันทั้งฝั่ง Receiver และ Transmitter ซึ่งประกอบด้วย

  • Start Bit เป็นสถานะ Low
  • ผู้ใช้งานสามารถกำหนดจำนวนข้อมูลของ Data Bit ให้เป็น 8 หรือ 9 Bit
  • ผู้ใช้งานสามารถกำหนดชนิดของ Parity Bit แบบ Odd, Even หรือ None
  • Stop Bit มีจำนวน 0.5, 1, 1.5 หรือ 2 บิต

นอกจากนี้ผู้ใช้งานควรศึกษาระดับแรงดันไฟฟ้าของสัญญาณการสื่อสารแบบ UART โดยแบ่งได้ดังนี้

  • TTL เป็นระดับสัญญาณแบบดิจิตอลทั่วไปที่ใช้กับ Microcontroller โดยสถานะโลจิก “0” จะมีแรงดันเท่ากับ 0 V และสถานะโลจิก “1” จะมีแรงดันเท่ากับ 3.3 หรือ 5 V
  • RS232 เป็นระดับสัญญาณที่ใช้กับ Computer โดยสถานะโลจิก “0” จะมีแรงดันเท่ากับ -5 หรือ -13 V และสถานะโลจิก “1” จะมีแรงดันเท่ากับ +5 หรือ +13V

รูป 1-3 แสดงการเชื่อมต่อสัญญาณสื่อสารแบบอนุกรมระหว่างอุปกรณ์ ขา Transmit Data (Tx) ของ Transmitter จะเชื่อมต่อกับ ขา Receive Data (Rx) ของ Receiver เพื่อส่งข้อมูลไปยัง Receiver ขา Rx ของ Transmitter เชื่อมต่อกับขา Tx ของ Receiver เพื่อรับข้อมูลจาก Receiver และขา GND ของอุปกรณ์ทั้งสองควรต่อด้วยกัน ถ้าอุปกรณ์ที่เชื่อมต่อมีระดับแรงดันไฟฟ้าที่แตกต่างกัน ผู้ใช้งานควรเพิ่มวงจรปรับแรงดันของสัญญาณ เช่น IC เบอร์ MAX232 [2] เป็นต้น

รูป 1-3 การเชื่อมต่อสายสัญญาณสื่อสารแบบ UART

รูป 1-3 การเชื่อมต่อสายสัญญาณสื่อสารแบบ UART

สำหรับ Blockset ที่เกี่ยวข้องกับการรับส่งข้อมูลด้วย UART ของบอร์ด STM32F4DISCOVERY นั้นอยู่ใน Simulink library >> Waijung Blockset >>  STM32F4 target >> On Peripheral Chip >> UART ซึ่งประกอบด้วย UART Setup, UART Tx และ UART Rx Block

เพื่อให้ STM32F4DISCOVERY สามารถใช้งาน UART ได้ ผู้ใช้งานต้องใส่ UART Setup Block ใน Simulink Model ซึ่ง Block จะหน้าที่

  1. เปิดการใช้งาน GPIO Clock สำหรับขาสัญญาณ Tx, Rx, RTS and CTS.
  2. การตั้งค่าของขา STM32F4 ให้เป็นขาสำหรับ Tx, Rx, RTS and CTS.
  3. เลือกใช้ UART Module Clock
  4. ตั้งค่าการใช้งาน UART
  5. เปิดการใช้งาน DMA clock
  6. การตั้งค่าใช้งาน Direct Memory Access สำหรับรับ-ส่งข้อมูล

โดย UART Setup Block มีลักษณะและคุณสมบัติดังรูป 1-4 ซึ่งเป็นตัวอย่างการเลือกใช้ UART Module 3 เป็นพอร์ตสื่อสารอนุกรม โดยให้ขา PD8/PD9 เป็นขา Tx/Dx ตามลำดับ ความเร็วการส่งข้อมูล 115200 bps และมีรูปแบบการสื่อสาร Data 8 bit, No parity bit และ One Stop bit

รูป 1-4 ลักษณะและการตั้งค่าการใช้งาน UART Setup Block

รูป 1-4 ลักษณะและการตั้งค่าการใช้งาน UART Setup Block

การทดลองใช้งานพอร์ตสื่อสาร UART

อุปกรณ์ที่ใช้ในการทดลอง

ในส่วนนี้จะแนะนำบอร์ด aMG USB Converter-N-Adapter โดยใช้ไอซี FT2232H แปลง USB 2.0 High Speed (480Mb/s) เป็น UART/FIFIO ได้สองช่อง [3] เนื่องจากมีการรับข้อมูลด้วยความเร็วสูง จึงเหมาะสำหรับการใช้งานแบบ Hardware In the Loop (HIL) simulation

รูป 2-1 ลักษณะ aMG USB Converter-N-Adapter [3]

รูป 2-1 ลักษณะ aMG USB Converter-N-Adapter [3]

รูป 2-2 การทดลองส่งข้อความจาก STM32F4DISCOVERY ไปยัง Computer

รูป 2-2 การทดลองส่งข้อความจาก STM32F4DISCOVERY ไปยัง Computer

เมื่อต่อไฟเลี้ยงเข้า aMG F4 Connect และเชื่อมต่อบอร์ด aMG USB Converter-N Adapter กับ Computer เป็นครั้งแรก ผู้ใช้งานควรตรวจสอบหมายเลข Com Port โดยขั้นตอนต่อไปนี้

  • เลือกเมนู Start กดเมาน์ขวาที่ Computer แล้วเลือก Properties จะมีหน้าต่างปรากฏดังรูป 2-3
รูป 2-3 หน้าต่างคุณสมบัติของ Window

รูป 2-3 หน้าต่างคุณสมบัติของ Window

  • เมื่อเลือก Device Manager ให้กดขยายคุณสมบัติของ Ports (Com & LPT) ซึ่งเป็นส่วนจัดการพอร์ตสื่อสารแบบอนุกรมและขนานของคอมพิวเตอร์ ดังรูป 2-4
รูป 2-4 หน้าต่าง Device Manager เพื่อตรวจสอบหมายเลข Com Port

รูป 2-4 หน้าต่าง Device Manager เพื่อตรวจสอบหมายเลข Com Port

นอกจากนี้ ผู้ใช้งานควรตั้งค่า Latency Timer ของ Com Port เพื่อให้รับส่งข้อมูลความเร็วสูงได้ดีขึ้น ซึ่งมีความจำเป็นสำหรับงาน Hardware in the Loop การตั้งค่า Latency Timer ของ  ซึ่งมีขั้นตอนดังนี้

  • กดเมาน์ขวาที่ USB Serial Port แล้วเลือก Properties จะมีหน้าต่างคุณสมบัติของ Serial Port ปรากฏดังรูป 2-5
รูป 2-5 หน้าต่างคุณสมบัติของ Com Port (aMG USB Converter-N Adapter)

รูป 2-5 หน้าต่างคุณสมบัติของ Com Port (aMG USB Converter-N Adapter)

  • ในช่อง BM Options ตั้งค่า Latency Timer เท่ากับ 1 ms (ค่าเริ่มต้นเท่ากับ 16ms) ดังรูป 2-6
รูป 2-6 หน้าต่างการตั้งค่าขั้นสูงของ Com Port เพื่อปรับค่า Latency Timer

รูป 2-6 หน้าต่างการตั้งค่าขั้นสูงของ Com Port เพื่อปรับค่า Latency Timer

หลังจากตรวจสอบหมายเลข Com Port แล้ว ผู้ใช้งานสามารถนำไปใช้ตั้งค่าหมายเลข Com Port ใน Host Serial Blockset (เมื่อใช้งาน Hard In the Loop Simulation) หรือโปรแกรมใช้งานพอร์ตสื่อสารแบบอนุกรม โดยบทเรียนนี้จะแนะนำโปรแกรมประเภท Freeware เพื่อติดต่อสื่อสารผ่านพอร์ตอนุกรม

การใช้งานโปรแกรมพอร์ตสื่อสารแบบอนุกรม

TeraTerm เป็นโปรแกรมใช้งานพอร์ตสื่อสารต่างๆ รวมถึงพอร์ตอนุกรม ซึ่งเป็นโปรแกรม Freeware โดยผู้ใช้งานสามารถ Download ได้จาก http://www.ayera.com/teraterm/ โปรแกรมนี้ทำงานกับระบบปฏิบัติการ Microsoft Window เท่านั้น ผู้ใช้สามารถตั้งค่าการใช้งานพอร์ตสื่อสาร โดยมีขั้นตอนดังนี้

  • เมื่อเริ่มต้น Run ttermpro.exe หน้าต่าง Tera Term: New connect จะปรากฎขึ้นมาดังรูป 2-7
รูป 2-7 การเลือกใช้งานพอร์ตสื่อสารในโปรแกรม TeraTerm

รูป 2-7 การเลือกใช้งานพอร์ตสื่อสารในโปรแกรม TeraTerm

รูป 2-9

  • บนเมนูของหน้าต่าง Terminal เลือก “Setup” -> “Terminal…” เพื่อตั้งค่าการใช้งานหน้าต่าง Terminal ดังรูป 2-8
รูป 2-8 การตั้งค่าการใช้งานหน้าต่าง Terminal ในโปรแกรม TeraTerm

รูป 2-8 การตั้งค่าการใช้งานหน้าต่าง Terminal ในโปรแกรม TeraTerm

  • บนเมนูของหน้าต่าง Terminal เลือก “Setup” -> “Serial port…” เพื่อการตั้งค่าคุณสมบัติของพอร์ตสื่อสารที่เลือกใช้ ยกตัวอย่างเช่น รูป 2-9 แสดงการตั้งค่าพอร์ตสื่อสารให้มี Baud rate 115200 bps, Data 8 bit, No parity bit และ One Stop bit
รูป 2-9 การตั้งค่าคุณสมบัติของพอร์ตสื่อสารในโปรแกรม TeraTerm

รูป 2-9 การตั้งค่าคุณสมบัติของพอร์ตสื่อสารในโปรแกรม TeraTerm

โปรแกรม PuTTY เดิมเป็นโปรแกรม Telnet เอาไว้เชื่อมต่อข้อมูล ส่งคำสั่งต่างๆ จากเครื่องลูก (Client) เข้าไปจัดการข้อมูลต่างๆ ในเครื่องแม่ (Server) ผ่านอินเตอร์เนต รวมถึงการติดต่อผ่านพอร์ตสื่อสารอนุกรม โปรแกรมนี้ทำงานกับระบบปฏิบัติการ Microsoft Window และ Linux เท่านั้น ผู้ใช้สามารถ Download ได้จาก http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

ขั้นตอนการใช้งานพอร์ตอนุกรมด้วยโปรแกรม Putty มีขั้นตอนดังนี้

  • เมื่อเริ่มต้น Run Putty.exe หน้าต่าง PuTTY Configuration จะปรากฎขึ้นมาดังรูป 2-10
รูป 2-10 การเลือกใช้งานพอร์ตสื่อสารในโปรแกรม PuTTY

รูป 2-10 การเลือกใช้งานพอร์ตสื่อสารในโปรแกรม PuTTY

  • เลือก Terminal เพื่อตั้งค่าการใช้งานหน้าต่าง Terminal ดังรูป 2-11
รูป 2-11 การตั้งค่าการใช้งานหน้าต่าง Terminal ในโปรแกรม PuTTY

รูป 2-11 การตั้งค่าการใช้งานหน้าต่าง Terminal ในโปรแกรม PuTTY

  • เลือก Serial เพื่อการตั้งค่าคุณสมบัติของพอร์ตสื่อสารที่เลือกใช้ ยกตัวอย่างเช่น รูป 2-12 แสดงการตั้งค่าพอร์ตสื่อสารให้มี Baud rate 115200 bps, Data 8 bit, No parity bit และ One Stop bit
รูป 2-12 การตั้งค่าคุณสมบัติของพอร์ตสื่อสารในโปรแกรม PuTTY

รูป 2-12 การตั้งค่าคุณสมบัติของพอร์ตสื่อสารในโปรแกรม PuTTY

วิธีการใช้งาน UART Tx Block

UART Tx Block ใช้หน้าที่ส่งข้อมูลออกจาก Microcontroller ไปยังอุปกรณ์ภายนอกผ่านขา Tx ที่เลือกไว้ เพื่อให้สะดวกต่อการส่งข้อมูล ผู้ใช้งานสามารถเลือกใช้ Packet Mode ได้สามแบบ คือ ASCII Mode, Binary Mode และ String Buffer ซึ่งเหมาะสำหรับส่งข้อความ

รูป 2-13 ลักษณะและการตั้งค่าการใช้งาน UART TX Block แบบ ASCII

รูป 2-13 ลักษณะและการตั้งค่าการใช้งาน UART TX Block แบบ ASCII

การทดลองส่งข้อความจาก STM32F4DISCOVERY ไปยัง Computer

จุดประสงค์

  • เพื่อให้ผู้ใช้งานเข้าใจโหมดการทำงานของ UART Tx Block ที่มี Packet Mode แบบต่างๆ ได้
  • เพื่อให้ผู้ใช้งานเข้าใจการส่งข้อมูลแบบ Binary และรหัส ASCII
รูป 2-14 Simulink Model สำหรับการส่งข้อความ

รูป 2-14 Simulink Model สำหรับการส่งข้อความ

เมื่อรวมข้อความใน Dialog ของ ASCII Format และ End of Packet จะรวมได้ว่า ‘Greeting from Waijung\n\r\n’ ดังนั้นเมื่อ Download ลงใน STM32F4DISCOVERY จะมีข้อความปรากฏบนหน้าต่างของ Tera Term ว่า Greeting from Waijung โดยจะเว้นบรรทัดเพิ่มอีกหนึ่งบรรทัดก่อนแสดงข้อความอีกครั้ง ดังรูป 2-15 ทุกๆ 1 วินาที (จากการตั้งค่า Sample time)

รูป 2-15 Tera Term แสดงข้อความที่ได้รับผ่านพอร์ตสื่อสาร UART

รูป 2-15 Tera Term แสดงข้อความที่ได้รับผ่านพอร์ตสื่อสาร UART

ชวนคิด ควรตั้งค่า UART Tx Block อย่างไรหากต้องการข้อความแสดงทันทีหลังขึ้นบรรทัดใหม่

ตอบ “\n” เป็นคำสั่งขึ้นบรรทัดใหม่ จากตัวอย่างพบว่ามีอยู่สองตำแหน่งคือ ใน ASCII Format และ End of Packet หากต้องการเว้นเพียงบรรทัดเดียว ให้แก้ไข ASCII Format เป็น ‘Greeting from Waijung’ หรือเลือก End of Packet เป็น CR (0x0D – “\r”)

รูป 2-16 Simulink Model สำหรับการทดลองส่งข้อความโดยใช้ Packet Mode แบบต่างๆ ¬

รูป 2-16 Simulink Model สำหรับการทดลองส่งข้อความโดยใช้ Packet Mode แบบต่างๆ ¬

ใน Simulink Model ไม่สามารถใช้ UART Module เดียวกันหลายๆ Block ที่มี Packet Mode ที่แตกต่างกันได้ อย่างไรก็ตาม Simulink Model ในรูป 2-16 เป็นตัวอย่างการใช้ Enable Subsystem สำหรับส่งข้อความโดยใช้ Packet Mode แบบต่างๆ โดยอ่านค่าสัญญาณดิจิตอลจาก Dip-Switch เป็นตัวเลือกโหมดการทำงานดังนี้

  • เมื่อ DIP-SW1 อยู่ที่ตำแหน่ง ON และ DIP-SW2 อยู่ที่ OFF สัญญาณจากสวิตซ์จะ Activate Sub System “SendMessage Stringbuf” Block ซึ่งเป็นตัวอย่างการใช้งาน UART TX โดยใช้ Packet Mode แบบ String Buffer ดังรูป 2-17 ภายในประกอบด้วย
    • Volatile Data Storage Block ซึ่งเป็นตัวแปรแบบ String ชื่อ s
    • String Buffer Processing Block ใช้กำหนดค่าหรือข้อความของตัวแปร String ที่ใช้งาน
    • UART Tx Block โดยเลือก Packet Mode แบบ String Buffer

เมื่อโปรแกรมทำงานในโหมดนี้ Hyperterminal จะแสดงข้อความ Greeting from Waijung ทุก ๆ 5 วินาที

รูป 2-17 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ String Buffer

รูป 2-17 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ String Buffer

  • เมื่อ DIP-SW1 อยู่ที่ตำแหน่ง OFF และ DIP-SW2 อยู่ที่ ON สัญญาณจากสวิตซ์จะ Activate Sub System “SendMessage Bin” ซึ่งเป็นตัวอย่างการใช้งาน UART TX โดยใช้ Packet Mode แบบ Binary ดังรูป 2-18 ภายใน Sub System ประกอบด้วย
    • Counter Limited Block เพื่อส่งค่าตัวเลขโดยเริ่มจาก 0 ถึง 106 โดยนับทุกๆ 1 วินาที
    • Constant Block ซึ่งมีค่าเลขฐานสิบหกเท่ากับ 0x20
    • UART Tx Block โดยเลือก Packet Mode แบบ Binary
รูป 2-18 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ Binary

รูป 2-18 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ Binary

หน้าต่างของ Teraterm แสดงข้อความที่เป็นตัวอักขระได้เท่านั้น (ASCII Printable Character) ซึ่งจาก ASCII Code Table [3] ในรูป 2-19 รหัสเลขฐานสิบหก 0x00 ถึง 0x1F จะใช้เป็นส่วน ASCII Control Character เช่น 0x0A สำหรับขึ้นบรรทัดใหม่ เป็นต้น ASCII Printable Character จะเริ่มจาก 0x20

เมื่อโปรแกรมทำงานในโหมดนี้ Teraterm จะแสดงตัวอักษร ตามลำดับในตารางทุกๆ 1 วินาที โดยไม่ขึ้นบรรทัดใหม่ (เพราะไม่มี “\n” หรือ 0x0A) แต่จะเริ่มด้านซ้ายสุดทุกครั้ง

รูป 2-19 ตารางเข้ารหัส ASCII

รูป 2-19 ตารางเข้ารหัส ASCII

  • เมื่อ DIP-SW1 อยู่ที่ตำแหน่ง ON และ DIP-SW2 อยู่ที่ ON สัญญาณจากสวิตซ์จะ Activate Sub System “SendMessage Ascii” ซึ่งเป็นตัวอย่างการใช้งาน UART TX โดยใช้ Packet Mode แบบ Ascii  ดังรูป 2-20 เมื่อโปรแกรมทำงานในโหมดนี้ HyperTerminal จะแสดงข้อความ “Value = และค่าที่อ่านได้จากตัวต้านทานปรับค่าได้
รูป 2-20 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ Ascii

รูป 2-20 Subsystem Block สำหรับส่งข้อความโดยใช้ Packet Mode แบบ Ascii

จากรูป 2-21 เมื่อใช้ Enable Sub System Block ผู้ใช้งานสามารถใช้ UART Tx Block ที่มี Packet Modeและความถี่ในการส่งข้อความที่แตกต่างกัน

รูป 2-21 Terminal แสดงข้อความที่ได้รับผ่านพอร์ตสื่อสาร UART ในโหมดการทำงานต่าง ๆ

รูป 2-21 Terminal แสดงข้อความที่ได้รับผ่านพอร์ตสื่อสาร UART ในโหมดการทำงานต่าง ๆ

วิธีการใช้งาน UART Rx Block

UART Rx Block ใช้หน้าที่รับข้อมูลออกจากอุปกรณ์ภายนอกผ่านขา Rx ที่เลือกไว้ ผู้ใช้งานสามารถเลือกใช้ Packet Mode ได้สามแบบ เช่นกัน

รูป 2-22 ลักษณะและการตั้งค่าการใช้งาน UART RX Block แบบ ASCII Mode

รูป 2-22 ลักษณะและการตั้งค่าการใช้งาน UART RX Block แบบ ASCII Mode

การทดลองรับข้อความจาก Computer

จุดประสงค์

  • เพื่อให้ผู้ใช้งานสามารถใช้งาน UART_RX Block สำหรับรับข้อมูลจาก Computer ได้
รูป 2-23 Simulink Model สำหรับการทดลองรับข้อความจาก Computer แบบ Blocking

รูป 2-23 Simulink Model สำหรับการทดลองรับข้อความจาก Computer แบบ Blocking

รูป 2-24 Simulink Model สำหรับการทดลองรับข้อความจาก Computer แบบ Non-Blocking

รูป 2-24 Simulink Model สำหรับการทดลองรับข้อความจาก Computer แบบ Non-Blocking

รูป 223 และ รูป 224 แสดง Simulink Model สำหรับการทดลองรับข้อความจาก Computer แบบ Blocking และ แบบ Non-Blocking ตามลำดับ เมื่อ Download Model ลงใน STM32F4DISCOVERY แล้วเปิดโปรแกรม TeraTerm ผู้ใช้งานพิมพ์ข้อความ “Hello Waijung”  บนหน้าต่าง Terminal ซึ่งเป็นการส่งข้อความส่งไปยัง STM32F4DISCOVERY ผ่าน USB แล้วกดปุ่ม Enter เพื่อแสดงสิ้นสุดการส่งข้อความ  จากนั้นข้อความที่ผู้ใช้ส่งไปจะแสดงผ่านจอ LCD ดังรูป 225

รูป 2-25 การทดลองรับข้อความจากคอมพิวเตอร์

รูป 2-25 การทดลองรับข้อความจากคอมพิวเตอร์

ชวนคิด เมื่อผู้ใช้กด Enter เพื่อระบุการส่งข้อความเสร็จ จะพบว่า 0x0D จะปรากฏบนจอแสดงผล ทำอย่างไร ไม่ให้ 0x0D ปรากฏบนจอแสดงผล LCD

จากตัวอย่าง ผู้ใช้งานสามารถสังเกตข้อแตกต่างการทำงานของ UART_RX Block แบบ Blocking และ Non-Blocking ได้ ในขณะที่ UART_RX block การทำงานแบบ Blocking นั้น Model จะรอรับข้อความให้เสร็จสิ้นก่อนจึงจะทำงานอื่น ดังนั้นหลอด LED2 จึงไม่กระพริบ

สำหรับ Model ในรูป 2-24 เมื่อผู้ใช้เลือก USART_Rx Block ให้การทำงานแบบ Non-Blocking จะมีสัญญาณ Ready เพื่อแสดงว่าข้อความได้รับเรียบร้อยแล้ว (สังเกตหลอด LED1 จะติดได้รับ CR – 0x0D หรือปุ่ม Enter) จากนั้นจึงแสดงข้อความที่ได้รับ ข้อดีของการรับข้อความแบบ Non-Blocking คือ Model สามารถทำงานอื่นๆ ได้โดยไม่ต้องรอให้การรับข้อความเสร็จสิ้น (สังเกตหลอด LED2 กระพริบได้)

การควบคุม Peripheral ต่างๆ ผ่าน Serial Communication

จุดประสงค์

  • เพื่อให้ผู้ใช้เข้าใจการทำงาน UART Rx Block โดยใช้ Packet Mode แบบ ASCII Format ได้
  • เพื่อให้ผู้ใช้สามารถควบคุม Peripheral ผ่าน Serial Communication
รูป 2-26 Simulink Model สำหรับควบคุม Peripheral ต่างๆ ผ่าน Serial Communication

รูป 2-26 Simulink Model สำหรับควบคุม Peripheral ต่างๆ ผ่าน Serial Communication

ข้อสังเกต ผู้ใช้สามารถใช้ UART Rx Module เดียวกันได้หลาย Block แต่ต้องมี Packet Mode เหมือนกัน

เมื่อ Download Simulink Model ลงใน STM32F4Discovery และเชื่อมต่อด้วยโปรแกรม Tera Term ผู้ใช้งานสามารถพิมพ์คำสั่งได้ดังนี้

เมื่อส่งคำสั่ง LED1=1 แล้วกด Enter UART Rx Block ตรวจสอบข้อความที่รับได้คือ “LED1=%u\r” จากนั้น Activate Subsystem Block และค่าที่อ่านได้ (%u) จะส่งให้ Subsystem Block ดังรูป 2-27 ภายในประกอบด้วย Digital Output Block เพื่อควบคุมการเปิดปิดหลอด LED1 ซึ่งต่อกับขา PD12 หลอดไฟจะติดเมื่อค่าอ่านได้ไม่เท่ากับ 0 ดังนั้น เมื่อส่งคำสั่ง LED1=0 แล้วกด Enter หลอดไฟ LED1 จะดับ และ UART Tx Block เพื่อส่งข้อความตอบรับ “>>Ok” มายังผู้ใช้

รูป 2-27 Subsystem Block สำหรับควบคุมการเปิดปิด LED

รูป 2-27 Subsystem Block สำหรับควบคุมการเปิดปิด LED

เมื่อพิมพ์ส่งคำสั่ง ADC%u? แล้วกด Enter UART Rx1 Block ตรวจสอบข้อความที่รับได้คือ “ADC%u\r” เพื่อ Activate Subsystem1 Block จากนั้นจะแสดงค่าของแรงดันที่อ่านได้

รูป 2-28 Subsystem Block สำหรับแสดงผลค่าแรงดันที่อ่านได้ที่ขา PA5

รูป 2-28 Subsystem Block สำหรับแสดงผลค่าแรงดันที่อ่านได้ที่ขา PA5

เมื่อพิมพ์คำสั่ง Input ตามด้วยตัวเลขแล้วกด Enter UART Rx2 Block ตรวจสอบข้อความที่รับได้คือ “Input%f\r” เพื่อ Activate Subsystem2 Block และค่าที่อ่านได้ (%f) จะส่งให้ Subsystem Block ในรูป 2-29  จากนั้นแสดงข้อความ Your Input is: ตามด้วยตัวเลขที่ใส่

รูป 2-29 Subsystem Block สำหรับแสดงตัวเลขที่รับได้

รูป 2-29 Subsystem Block สำหรับแสดงข้อความและตัวเลขที่รับได้

รูป 2-30 ข้อความบนหน้าจอ Terminal ของโปรแกรม TerTerm โดยแสดงข้อความ “>>OK” หลังจากเปิด-ปิดหลอด LED แสดงค่าแรงดันที่อ่านได้จากขา PA5 และแสดงค่าตัวเลขที่รับได้แบบ Floating

รูป 2-30 ผลการทดลองการควบคุม Peripheral ผ่านคอมพิวเตอร์

รูป 2-30 ผลการทดลองการควบคุม Peripheral ผ่านคอมพิวเตอร์

การทดลองการสื่อสารระหว่าง Microcontroller

การสื่อสารอนุกรมระหว่าง Microcontroller สามารถเชื่อมต่อสายได้โดยตรง ซึ่งผู้ใช้งานควรตรวจสอบว่าระดับแรงดันไฟฟ้าทั้งผู้รับและผู้ส่งมีค่าเท่ากัน ตัวอย่างนี้ใช้บอร์ด Microcontroller จำนวน 2 ชุด โดยบอร์ดที่ 1: STM32F4DISCOVERY และบอร์ดที่ 2: FiO2 ซึ่งใช้ Microcontroller รุ่น STM32F417IG โดยติดตั้งกับบอร์ด aMG F4 Connect ซึ่งทั้งสองบอร์ด มีระดับแรงดันไฟฟ้าของสายสื่อสารอนุกรม มีค่าประมาณ 3.3 V

การทดลองสื่อสารระหว่าง Microcontroller แบบ Blocking

จุดประสงค์

  • เพื่อให้ผู้ใช้งานเข้าใจการสื่อสารอนุกรมระหว่าง Microcontroller ได้
รูป 3-1 Simulink Model สำหรับส่งข้อความแบบ Blocking สำหรับบอร์ดที่ 1

รูป 3-1 Simulink Model สำหรับส่งข้อความแบบ Blocking สำหรับบอร์ดที่ 1

เมื่อ Download Model ดังรูป 3-1 ลงใน STM32F4DISCOVERY ตัวเลข 0 และ 1 จะถูกส่งสลับกันไปแบบ Packet Binary โดย UART Module 1 ผ่านขา PB6 และ ข้อความ ‘Value=%u\n’ จะถูกส่งโดย UART Module 6 ผ่านขา PC6 ทุกๆ 0.25 วินาที

สำหรับบอร์ดที่ 2 จะเป็นผู้รับข้อความโดยผู้ใช้ต้อง Download Model ดังรูป 3-2 ลงในบอร์ด FiO2 ซึ่งประกอบด้วย UART RX Block จำนวน 2 Block โดย Block แรกใช้รับข้อความแบบ Binary และอีก Block ใช้รับข้อความแบบ Ascii โดยอ่านข้อความทุก ๆ 0.01 วินาที เพื่อให้รับข้อมูลอย่างถูกต้อง ผู้รับควรมีความถี่การทำงานมากกว่าผู้ส่งประมาณ 2 เท่า

ค่าที่รับได้จาก UART นำไปควบคุมการเปิดปิดหลอด LED1 และ LED2 บนบอร์ด aMG F4 Connect  โดยหลอดไฟทั้งสองจะกระพริบทุกๆ 0.25 วินาที

รูป 3-2 Simulink Model สำหรับรับข้อความแบบ Blocking สำหรับบอร์ดที่ 2

รูป 3-2 Simulink Model สำหรับรับข้อความแบบ Blocking สำหรับบอร์ดที่ 2

รูป 3-3 การทดลองการสื่อสารระหว่าง Microcontroller (แบบ Blocking)

รูป 3-3 การทดลองการสื่อสารระหว่าง Microcontroller (แบบ Blocking)

ผู้ใช้สามารถเลือกใช้ UART Module สำหรับรับและส่งข้อมูลได้อย่างอิสระ โดยเลือก Module ที่ต้องการใน UART Setup Block จากนั้นเชื่อมต่อสาย RX-TX ให้ตรงกับ Module ที่ใช้งาน จากรูป 3-3 แสดงวิธีเชื่อมต่อสายสื่อสารแบบอนุกรมระหว่าง Microcontroller โดยทั้งสองบอร์ดเลือกใช้ UART Module 1 และ 6

การทดลองสื่อสารระหว่าง Microcontroller แบบ Non-Blocking

จุดประสงค์

  • เพื่อให้ผู้ใช้งานเข้าใจการสื่อสารอนุกรมระหว่าง Microcontroller แบบ Non-Blocking ได้
รูป 3-4 Simulink Model สำหรับส่งข้อความแบบ Non-Blocking สำหรับบอร์ด 1

รูป 3-4 Simulink Model สำหรับส่งข้อความแบบ Non-Blocking สำหรับบอร์ด 1

Simulink Model ดังรูป 3-4 ประกอบด้วย UART TX แบบ Non-Blocking จำนวน 3 Block โดยแต่ละ Block จะส่งข้อความแบบ Ascii ต่างๆกัน และความถี่ในการส่งไม่เท่ากัน เมื่อ Download Model ลงใน STM32F4Discovery บอร์ดที่หนึ่งจะส่งข้อความ “LED1=%u\n” ทุกๆ 0.125 วินาที UART Tx2 Block จะส่งข้อความ “LED2=%u\n” ทุกๆ 0.25 วินาที และ UART TX3 Block จะส่งข้อความ “LED3=%u\n” ทุกๆ 0.5 วินาที ผ่านขา PB6 เพียงขาเดียว

สำหรับบอร์ดที่ 2 จะเป็นผู้รับข้อความโดยผู้ใช้ต้อง Download Model ดังรูป 3-5 ลงในบอร์ด FiO2 ซึ่งประกอบด้วย UART RX Block แบบ Non-blocking จำนวน 3 Block โดยแต่ละ Block อ่านข้อความแบบ Ascii ทุก ๆ 0.001 วินาที เมื่อได้รับข้อความที่ตั้งไว้ ค่าที่อ่านได้จะนำไปควบคุมการเปิดปิดหลอดไฟ LED ซึ่งอยู่ใน Enable Subsystem Block เช่นเดียวกันเพื่อให้รับข้อมูลอย่างถูกต้อง ผู้รับควรมีความถี่การทำงานมากกว่าผู้ส่งอย่างน้อย 2 เท่า

รูป 3-5 Simulink Model สำหรับรับข้อมูลแบบ Non-Blocking สำหรับบอร์ด 2

รูป 3-5 Simulink Model สำหรับรับข้อมูลแบบ Non-Blocking สำหรับบอร์ด 2

รูป 3-6 แสดงวิธีเชื่อมต่อสายสื่อสารแบบอนุกรมระหว่าง Microcontroller โดยเลือกใช้ UART Module 1 สำหรับบอร์ดที่ 1 และ 2

รูป 3-6 การทดลองการสื่อสารระหว่าง Microcontroller แบบ Non-Blocking

รูป 3-6 การทดลองการสื่อสารระหว่าง Microcontroller แบบ Non-Blocking

เอกสารอ้างอิง

  1. STMicroelectronics, RM0090: STM32F40xxx Reference Manual [Online], 2013
  2. Texas  Instruments, MAX232-Dual EIA-232 driver/receivers [Online]. Available: http://www.ti.com/lit/ds/symlink/max232.pdf. [2004]
  3. Future Technology Device International, FT2232H DUAL HIGH SPEED USB TO MULTIPURPOSE UART/FIFO IC [Online]. Avaible: http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT2232H.pdf. [2012].
  4. Aimagin, aMG USB Converter – N2 [Online]. Available: https://www.aimagin.com/amg-usb-converter-n2.html. [Accessed 18 February 2014].
  5. CommFront,  ASCII Table / ASCII Chart – Standard and Extended ASCII Codes  [Online]. Available: http://www.commfront.com/ascii-chart-table.htm [Accessed 9 January 2014]
  6. Jimbo, RS-232 vs. TTL Serial Communication- SparkFun Electronics, Sparkfun Electronics:, 23 November 2010. [Online]. Available: https://www.sparkfun.com/tutorials/215
  7. Ayera Technologies  Inc., TeraTerm 3.1.3 – Telnet, SSH2, SSL Client with built in Web Server  2002. [Online]. Available: http://www.ayera.com/teraterm/
  8. S. Tatham, PuTTY: A Free Telnet/SSH Client, [Online]. Available: http://www.chiark.greenend.org.uk/~sgtatham/putty/. [Accessed 6 August 2013].