CẨM NANG STM32 CĂN BẢN CẦN BIẾT – USART – Dự án UART

USART/UART Ngoại vi

Trong cuốn sách này và tài liệu kỹ thuật nói chung, bạn sẽ thấy các thuật ngữ USART và UART được sử dụng gần như thay thế cho nhau. Sự khác biệt giữa chúng: USART là viết tắt của Universal Synchronous/Asynchronous Receiver/Transmitter (Bộ thu/phát không đồng bộ/đồng bộ). UART bỏ đi chức năng đồng bộ trong tên gọi.

Các thiết bị ngoại vi USART/UART gửi dữ liệu tuần tự qua một dây. Dây này được sử dụng để gửi (TX) và một dây khác để nhận dữ liệu (RX). Giao tiếp đồng bộ đôi khi yêu cầu một đầu làm phần chính (master) và cung cấp một tín hiệu xung nhịp. Giao tiếp không đồng bộ không sử dụng tín hiệu xung riêng biệt nhưng yêu cầu cả hai đầu phải đồng bộ cùng tốc độ xung nhịp – được gọi là tốc độ truyền (baud rate). Giao tiếp không đồng bộ bắt đầu với bit bắt đầu và kết thúc bằng bit dừng cho mỗi kiểu ký tự.

Các thiết bị ngoại vi USART cung cấp bởi STM32F103 khá linh hoạt. Chúng có chức năng như USART hoặc UART, tùy vào cấu hình. Chương này sẽ tập trung vào chế độ không đồng bộ vì nó đơn giản hơn, và do đó UART áp dụng cho phần còn lại của chương này. 

=> Bài viết được trích từ sách : Cẩm nang STM32 (tập 1)

Dữ liệu không đồng bộ

Hình 6-1 thể hiện hình quét (có chú thích) trên màn hình dao động ký của một byte không đồng bộ 0x65 được truyền đi. Tín hiệu TTL (Transistor Transistor Logic) này bắt đầu ở bên trái với mức cao (gần 5V). Sự bắt đầu của ký tự được đánh dấu bằng một bit thấp (gần 0V), được gọi là bit bắt đầu. Điều này báo cho đầu nhận rằng các bit tiếp sau là bit dữ liệu, đầu tiên với các bit ít quan trọng nhất (little-endian). Ví dụ này là một giá trị 8-bit. Sự kết thúc của ký tự được đánh dấu bằng một bit dừng. Nếu bit dừng không nhận thấy bởi đầu nhận, một lỗi sẽ được gắn cờ.

Hình 6-1. Hình quét (có chú thích) trên màn hình dao động ký của tín hiệu UART có giá trị 0x65. Lưu ý cách các bit nhỏ nhất được gửi trước tiên.

Giá trị được gửi có thể được cấu hình có độ dài 8 hoặc 9 bit. Bit cuối cùng là bit chẵn-lẻ khi được kích hoạt. (Các) bit dừng kết thúc việc truyền một ký tự và được cấu hình với chiều dài 0.5, 1, 1.5 hoặc 2 bit.

Bộ chuyển đổi USB Serial

Bộ chuyển đổi TTL USB serial là một thiết bị cực kỳ hữu ích khi làm việc với vi điều khiển. Với rất ít dây nối, bạn có thể sử dụng một chương trình thiết bị terminal trên máy tính của bạn để giao tiếp với STM32. Điều này giúp giảm chi phí khi không cần dùng thêm màn hình LCD đắt tiền và bàn phím.

Nếu bạn chưa có thiết bị này, dưới đây là một số nguyên tắc lựa chọn bạn có thể tham khảo:

  • Nó phải là một bộ chuyển đổi “TTL” (tín hiệu ở mức +5V hoặc +3.3V).
  • Thiết bị USB được hệ điều hành của bạn hỗ trợ.
  • Thiết bị hỗ trợ điều khiển luồng phần cứng (RTS và CTS).

Sự phân biệt TTL là quan trọng. Adapter RS-232 thường hoạt động ở ±3V hoặc hơn. Nó không thể kết nối trực tiếp với STM32 của bạn.

Mặc khác, các bộ chuyển đổi TTL serial hoạt động giữa 0 và +5V có thể được sử dụng với bất kỳ input chịu được áp 5V nào. May mắn là, ST Microelectronics thiết kế dòng nhận (RX) cho UART 1 và 3 có đầu vào 5V. STM32 hoạt động tốt từ 3.3V vì tín hiệu mức cao là cao hơn ngưỡng cần thiết để được xem như là 1-bit bởi bộ chuyển đổi.

Hình 6-2 minh họa một loại được tác giả dùng. Hãy sử dụng một thiết bị tương tự để điều khiển luồng phần cứng. Chúng sẽ bao gồm các kết nối cho RTS và CTS. Nếu không kiểm soát luồng phần cứng, bạn sẽ không thể sử dụng tốc độ truyền cao hơn, như ở 115.200 baud, mà không làm mất dữ liệu. Hãy cẩn thận về các thiết bị FTDI. Trong các phần trước đã có báo cáo của FTDI (FTDI Chip) trình điều khiển FTDI giả. Tốt nhất nên sử dụng một thiết bị FTDI chính hãng hoặc để tránh các thiết bị không tương thích với FTDI.

Hình 6-2. Ví dụ cáp chuyển đổi USB TTL serial.
Mẫu giấy là chú thích tên các dây nối màu.

Nối dây

Hai dự án đặc trưng trong chương này yêu cầu bạn gắn bộ chuyển tiếp TTL USB serial vào để máy tính của bạn có thể xem output. Hình 6-3 cho thấy cách nối dây cần thực hiện.

Hình 6-3. Kết nối USB TTL cho giao tiếp ngõ ra.
Không có điều khiển luồng nào được sử dụng trong ví dụ này.

Tốc độ truyền được sử dụng trong chương này là 38400, nó tương đối thấp. Điều này cho phép chúng ta điều khiển luồng để đơn giản bản demo đầu tiên của chúng ta. Bạn có thể cấp nguồn cho thiết bị của mình từ nguồn +5V của bộ chuyển đổi, như được hiển thị. Kết nối nguồn cấp đó với đầu vào +5V trên Blue Pill của bạn để bộ điều áp onboard sẽ cung cấp cho MCU nguồn 3.3V.

Nếu điều này là không thể, hãy cấp điện cho thiết bị một cách riêng biệt. Đảm bảo nối đất chung giữa nguồn điện, MCU và bộ chuyển đổi.

Cuối cùng, lưu ý rằng chỉ cần một kết nối dữ liệu cho các bản demo cụ thể này. Điều này là do các chương trình demo này chỉ truyền và không nhận dữ liệu từ máy tính.

=> xem thêm : Lập trình Arm STM32

Dự án uart

Chuyển đến thư mục sau:

$ cd ~/stm32f103c8t6/rtos/uart

Đảm bảo rằng bộ chuyển tiếp USB đã được rút ra trước khi gắn bộ lập trình. Khi bộ lập trình sẵn sàng, hãy build và flash nó như sau:

$ make clobber
$ make
$ make flash

Sau khi flash và thiết bị bắt đầu chạy chương trình, nó sẽ xuất văn bản. Để xem nó, bạn cần phải sử dụng một trình giả lập thiết bị terminal trên máy tính của bạn. Ngắt kết nối bộ lập trình ST-Link V2 và gắn bộ chuyển đổi USB serial. Hình 6-2 minh họa các kết nối. Với nguồn được sử dụng từ bộ chuyển đổi, bạn sẽ thấy LED nguồn của thiết bị STM32 và LED PC13 nhấp nháy.

Tôi sẽ sử dụng chương trình minicom terminal cũ trong văn bản này, nhưng có một chương trình tốt khác là putty. Sử dụng trình quản lý gói của hệ thống để cài đặt một trong hai khi cần thiết.

Để sử dụng bộ chuyển đổi, bạn cần phải biết tên đường dẫn thiết bị hoặc cổng COM của thiết bị theo kiểu của hệ điều hành. Đối với Mac hoặc Linux, bạn có thể khám phá nó chỉ bằng cách nhìn vào thư mục /dev. Trên máy Mac, thiết bị sẽ hiển thị với phần đầu /dev/cu khi nó được cắm vào và hoạt động (nếu không, hãy tìm /dev/ttyusbserial*). Khi bạn rút phích cắm, tên thiết bị này sẽ biến mất.

Sử dụng minicom, trước tiên bạn sẽ cần định cấu hình cổng giao tiếp bằng cách cung cấp tùy chọn -s:

$ minicom -s
    +-----[configuration]------+
    | Filenames and paths      |
    | File transfer protocols  |
    |>Serial port setup        |
    | Modem and dialing        |
    | Screen and keyboard      |
    | Save setup as dfl        |
    | Save setup as..          |
    | Exit                     |
    | Exit from Minicom        |
    +--------------------------+

Kéo xuống “Serial port setup” và nhấn Enter:

+-----------------------------------------------------------------+
| A -    Serial Device      : /dev/cu.usbserial-A703CYQ5          |
| B - Lockfile Location     : /usr/local/Cellar/minicom/2.7/var   |
| C -   Callin Program      :                                     |
| D -  Callout Program      :                                     |
| E -    Bps/Par/Bits       : 2400 8O1                            |
| F - Hardware Flow Control : No                                  |
| G - Software Flow Control : No                                  |
|                                                                 |
|    Change which setting?                                        |
+-----------------------------------------------------------------+

Nhập “A” nếu tên đường dẫn thiết bị hiển thị không chính xác. Đảm bảo rằng điều khiển luồng được tắt bằng cách nhập “F” và/hoặc “G” nếu cần. Cuối cùng, nhập “E” để thay đổi cài đặt cổng:

+-----------------+---------[Comm Parameters]----------+-------+
| A -    Serial De|                                    |       |
| B - Lockfile Loc|     Current: 38400 8N1             |2.7/var|
| C -   Callin Pro| Speed            Parity      Data  |       |
| D -  Callout Pro| A: <next>        L: None     S: 5  |       |
| E -    Bps/Par/B| B: <prev>        M: Even     T: 6  |       |
| F - Hardware Flo| C:   9600        N: Odd      U: 7  |       |
| G - Software Flo| D:  38400        O: Mark     V: 8  |       |
|                 | E: 115200        P: Space          |       |
|    Change which |                                    |       |
+-----------------| Stopbits                           |-------+
        | Screen a| W: 1             Q: 8-N-1          |
        | Save set| X: 2             R: 7-E-1          |
        | Save set|                                    |
        | Exit    |                                    |
        | Exit fro| Choice, or <Enter> to exit?        |
        +---------+------------------------------------+

Khi bảng “Comm Parameters” được hiển thị, bạn có thể nhập “Q” để chọn “8-N-1” và sau đó nhập “D” để đặt tốc độ truyền thành 38400. Sau đó, nhấn Enter hai lần để quay lại menu chính.

Tại menu chính, chọn “Save setup as…” để lưu cài đặt của bạn cho lần tiếp theo. Hãy sử dụng “chap6” làm tên và nhấn Enter. Nếu bạn gặp khó khăn trong việc lưu, có thể vì gói minicom đã đặt thư mục vào một vị trí mà bạn không được cấp quyền. Trong trường hợp này, bạn nên sử dụng tên đường dẫn đầy đủ, bắt đầu bằng dấu gạch chéo, để ghi đè thành phần thư mục.

+-----------------------------------------+
|Give name to save this configuration?    |
|> chap6                                  |
+-----------------------------------------+

Nếu thiết bị của bạn bắt đầu sau khi được flash, bạn có thể thấy dòng đầu tiên không đầy đủ, nhưng phần còn lại của đầu ra phải tương tự như sau:

Welcome to minicom 2.7
OPTIONS:
Compiled on Sep 17 2016, 05:53:15.
Port /dev/cu.usbserial-A703CYQ5, 16:30:48
Press Meta-Z for help on special keys
UVWXYZ
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789:;<=>?@

Chương trình được thiết kế để từ từ viết các dòng lặp, với thời gian ở giữa mỗi ký tự. Thực hiện chậm như thế này tránh phải điều khiển luồng.

Nếu bạn cần khởi động lại minicom, giờ đây bạn có thể sử dụng các cài đặt đã lưu của mình như sau:

$ minicom chap6

Trên máy Mac, minicom có ​​thể gây lỗi cho trình điều khiển USB nếu bạn rút bộ chuyển đổi (adapter) ra mà không thoát khỏi chương trình trước. Để thoát minicom, sử dụng ESC-X (trên một số hệ thống, bạn phải sử dụng Control-A-X thay thế).

+----------------------+
|    Leave Minicom?    |
|     Yes       No     |
+----------------------+

YES sẽ được đánh dấu theo mặc định, cho phép bạn chỉ cần nhấn Enter. Nếu bạn không thấy điều này, thì bạn cần thử lại. Nhấn X ngay lập tức sau khi nhấn ESC (hoặc Control-A), vì thao tác này nhạy cảm với thời gian. Một khi minicom đã đóng trình điều khiển USB và thoát, nó đã an toàn để rút adapter ra. Nếu bạn làm hỏng cổng USB, bạn có thể sử dụng cổng khác hoặc khởi động lại.

=> Sách Arduino, ESP8266, STM32 : Sách tự động hóa