🌱 STM32 - 11. Tổng quan ngoại vi UART
USART - Universal Synchronous/Asynchronous Receiver Transmitter, tức là truyền thông nối tiếp đồng bộ/bất đồng bộ, đây là một ngoại vi quan trọng và cơ bản nhất trong các vi điều khiển. Chuẩn truyền thông UART và UART trong 8051 đã được giới thiệu trong bài viết về 8051 UART. Khác với UART chỉ hoạt động được ở chế độ bất đồng bộ thì USART có thể hoạt động ở cả 2 chế độ: đồng bộ và bất đồng bộ.
💀 Lưu ý, mỗi ngoại vi ngoài những tính năng cơ bản, thì còn rất nhiều thứ để tìm hiểu về nó. Đặc biệt với những dòng vi điều khiển có hiệu năng lớn (thường được các hệ thống lớn sử dụng), các ngoại vi này càng phức tạp và phân hóa hơn. Việc hiểu được chuẩn giao thức là đặc điểm cơ bản nhất mà chúng ta có thể tìm thấy ở mọi dòng vi điều khiển.
👉 Đặc điểm ngoại vi USART trong STM32
Ngoài một số đặc điểm chính của UART, ngoại vi USART trong vi điều khiển STM32 có một số đặc điểm chính như sau:
- Hỗ trợ đến 6 bộ ngoại vi USART (USART1 và USART6 trên bus APB2, 4 bộ còn lại từ USART2 đến USART5 trên bus APB1).
- Các cờ truyền/nhận, thanh ghi truyền/nhận riêng biệt.
- USART có thể hỗ trợ truyền cả chế độ đồng bộ và chế độ bất đồng bộ (Ở chế độ đồng bộ, sẽ có thêm một đường clock độc lập để đồng bộ dữ liệu, các bit start/stop sẽ không được sử dụng).
- Hỗ trợ thêm giải mã cho bộ mã hóa IrDA SIR cho giao tiếp hồng ngoại.
- Hỗ trợ giao tiếp SmartCard.
- Hỗ trợ DMA để truyền nhận dữ liệu thông qua SRAM.
- So với 8051, ở STM32, USART có thêm các cờ phát hiện lỗi. Tổng cộng có 4 cờ: Overrun Flag (Việc truyền nhận diễn ra quá nhanh), Noise Detection (phát hiện nhiễu), Frame Error (Lỗi khung truyền sai), Parity Error (lỗi chẵn lẻ của data).
👉 Phần cứng của USART
Trong vi điều khiển STM32, ngoại vi USART thực chất là một phần cứng, bao gồm các thành phần chính sau:
- Một bộ Baudrate Generator để tạo tốc độ Baud.
- Thanh ghi dịch khi truyền nhận (TX/RX Shift Register) và thanh ghi dữ liệu (data register).
Các thanh ghi dịch sinh ra với mục địch chuyển đổi dữ liệu.
💬 Khi truyền đi, nó sẽ chuyển dữ liệu song song (từ bus dữ liệu đặt lên thanh ghi data) thành tín hiệu nối tiếp trên đầu ra chân TX.
💬 Ngược lại, khi nhận dữ liệu, nó sẽ chuyển tín hiệu nối tiếp từ chân RX thành tín hiệu song song để đặt vào thanh ghi data. - Khối điều khiển việc truyền nhận (Transmit/Receive control blocks)
Các khối này sẽ tương tác trực tiếp với những thanh ghi/ các cờ truyền nhận để điều khiển việc đọc ghi dữ liệu. Để biết các bit cụ thể trên các thanh ghi làm gì, chúng ta cũng có thể xem sơ đồ khối này. - First In First Out (FIFO) Memory
- Các thành phần khác:Hardware Flow Controller, tương tác trực tiếp với 2 khối điều khiển việc truyền nhận dữ liệu, và 2 chân bên ngoài (RTS/CTS), 2 chân này được nói bên dưới.
👉 Sơ đồ chân
Ngoài ra STM32 cung cấp cho chúng ta thêm 2 chân RTS và CTS được kết nối với khối Hardware Flow Control như đã nói ở trên. Khối này có vài trò điều khiển truyền nhận bằng phần cứng, thay vì sử dụng các bit của thanh ghi.
- CTS - Clear to Send: Chân này dùng để kích hoạt việc truyền dữ liệu, bằng cách kéo chân này xuống mức 0, ngoại vi USART sẽ truyền dữ liệu trong bộ đệm.
- RTS - Request to Send: Có chân CTS rồi nên RTS sinh ra để cho đủ một cặp, chân này do bên nhận phát ra để báo là mình sẵn sàng nhận dữ liệu.
Đó là những đặc điểm thêm về USART trong STM32, những đặc điểm cơ bản như Baudrate, Frame truyền dữ liệu, các bạn vui lòng đọc bài 8051 UART nha 😊