Ứng dụng HOLTEK HT32 MCU UART Ghi chú Hướng dẫn sử dụng
Giới thiệu
Bộ thu/phát không đồng bộ đa năng – UART là giao diện truyền nối tiếp được sử dụng rộng rãi, cung cấp khả năng truyền dữ liệu song công hoàn toàn không đồng bộ linh hoạt. Mã ứng dụng “Module_UART” được cung cấp trong ghi chú ứng dụng này sử dụng các ngắt TX/RX với bộ đệm vòng phần mềm để triển khai các chức năng truyền/nhận UART đơn giản thông qua các API có các chức năng liên quan được mô tả bên dưới. Điều này sẽ đơn giản hóa toàn bộ quá trình truyền dữ liệu và cho phép người dùng nhanh chóng hiểu và triển khai các ứng dụng giao tiếp UART.
- Các chức năng truyền/nhận: đọc byte, ghi byte, đọc bộ đệm, ghi bộ đệm, v.v.
- Các chức năng trạng thái: lấy độ dài bộ đệm, trạng thái TX, v.v.
Tài liệu này trước tiên sẽ giới thiệu về giao thức truyền thông UART, qua đó giúp người dùng hiểu rõ hơn về giao tiếp UART từ nguyên lý đến ứng dụng. Tiếp theo là tải xuống và chuẩn bị các tài nguyên cần thiết cho mã ứng dụng, bao gồm thư viện chương trình cơ sở, tải xuống mã ứng dụng, file và cấu hình thư mục cũng như phần giới thiệu về công cụ phần mềm đầu cuối được sử dụng trong ghi chú ứng dụng. Trong chương Mô tả chức năng, cấu trúc thư mục mã ứng dụng, cài đặt tham số và mô tả API sẽ được giới thiệu. Việc sử dụng API sẽ được mô tả bằng cách sử dụng mã ứng dụng “Module_UART” và mức tiêu thụ tài nguyên Flash/RAM cần thiết cho các API cũng sẽ được liệt kê. Chương Hướng dẫn sử dụng sẽ hướng dẫn người dùng qua các bước chuẩn bị, biên dịch và kiểm tra môi trường để xác nhận rằng mã ứng dụng sẽ hoạt động bình thường. Sau đó, nó sẽ cung cấp hướng dẫn giải thích cách tích hợp API vào dự án của người dùng và cuối cùng cung cấp tài liệu tham khảo về các sửa đổi và sự cố phổ biến có thể gặp phải.
Các từ viết tắt được sử dụng:
- UART: Bộ tiếp nhận không đồng bộ / đồng bộ chuyển giao
- Giao diện lập trình ứng dụng (API): Giao diện lập trình ứng dụng
- LSB: Bit ít quan trọng nhất
- MSB: Điều ý nghĩa nhất
- Máy tính: Máy tính cá nhân
- SK: Starter Kit, bảng phát triển HT32
- Ý tưởng: Môi trường phát triển tích hợp
Giao thức truyền thông UART
UART là một loại giao diện truyền thông nối tiếp thực hiện chuyển đổi dữ liệu song song sang nối tiếp tại máy phát của nó và sau đó giao tiếp nối tiếp với máy thu tương tự. Sau đó, bộ thu thực hiện chuyển đổi dữ liệu nối tiếp sang song song sau khi nhận dữ liệu. Hình 1 cho thấy một sơ đồ truyền thông nối tiếp cho thấy cách dữ liệu được truyền theo thứ tự từng bit. Do đó, đối với giao tiếp hai chiều giữa máy phát và máy thu, chỉ cần hai dây, TX và RX, để truyền dữ liệu nối tiếp lẫn nhau. TX là chân mà UART truyền dữ liệu nối tiếp và được kết nối với chân RX của máy thu. Do đó, thiết bị phát và thiết bị thu cần kết nối chéo các chân TX và RX của chúng để thực hiện giao tiếp hai chiều UART, như thể hiện trong Nhân vật 2.
Hình 1. Sơ đồ truyền thông nối tiếp
Hình 2. Sơ đồ mạch UART
Trong giao tiếp nối tiếp UART, truyền dữ liệu không đồng bộ. Điều này có nghĩa là không có đồng hồ hoặc tín hiệu đồng bộ hóa khác giữa máy phát và máy thu. Ở đây, tốc độ baud được sử dụng, là tốc độ truyền/nhận dữ liệu nối tiếp và được cả hai bên đặt trước khi truyền dữ liệu. Ngoài ra, các bit đặc biệt như bit bắt đầu và kết thúc được thêm vào phần đầu và phần cuối của gói dữ liệu để tạo thành một gói dữ liệu UART hoàn chỉnh. Hình 3 hiển thị cấu trúc gói dữ liệu UART trong khi Hình 4 hiển thị gói dữ liệu UART 8 bit không có bit chẵn lẻ.
Hình 3. Cấu trúc gói dữ liệu UART
Hình 4. Định dạng gói dữ liệu 8-bit UART
Từng phần của gói dữ liệu UART được giới thiệu theo thứ tự bên dưới.
- Bit bắt đầu: Điều này chỉ ra sự bắt đầu của một gói dữ liệu. Chân UART TX thường duy trì ở mức logic cao trước khi bắt đầu truyền. Nếu quá trình truyền dữ liệu bắt đầu, bộ phát UART sẽ kéo chân TX từ cao xuống thấp, tức là từ 1 xuống 0, sau đó giữ nó ở đó trong một chu kỳ xung nhịp. Bộ thu UART sẽ bắt đầu đọc dữ liệu khi phát hiện quá trình chuyển đổi từ cao xuống thấp trên chân RX.
- Dữ liệu: Đây là dữ liệu thực tế được truyền, với độ dài dữ liệu là 7, 8 hoặc 9 bit. Dữ liệu thường được truyền bằng LSB trước.
- Bit chẵn lẻ: Số logic “1” trong dữ liệu được sử dụng để xác định xem có bất kỳ dữ liệu nào đã thay đổi trong quá trình truyền hay không. Đối với chẵn lẻ, tổng số logic “1” trong dữ liệu phải là một số chẵn, ngược lại, tổng số logic “1” trong dữ liệu phải là một số lẻ đối với chẵn lẻ.
- Dừng Bit: Điều này cho biết sự kết thúc của gói dữ liệu, nơi bộ phát UART sẽ kéo chân TX từ thấp lên cao, tức là từ 0 lên 1, sau đó giữ nó ở đó trong khoảng thời gian 1 hoặc 2 bit.
Như đã đề cập trước đây, vì không có tín hiệu đồng hồ trong mạch UART, nên tốc độ truyền/nhận dữ liệu nối tiếp giống nhau, được gọi là tốc độ baud, phải được xác định giữa máy phát và máy thu để thực hiện truyền không có lỗi. Tốc độ truyền được xác định bằng số bit được truyền mỗi giây, tính bằng bps (bit per second). Một số tốc độ truyền tiêu chuẩn và thường được sử dụng là 4800bps, 9600bps, 19200bps, 115200bps, v.v. Thời gian tương ứng cần thiết để truyền một bit dữ liệu được hiển thị bên dưới.
Bảng 1. Tốc độ truyền so với thời gian truyền 1 bit
Tốc độ truyền | Truyền 1 bit Thời gian |
4800bps | 208.33µs |
9600bps | 104.16µs |
19200bps | 52.08µs |
115200bps | 8.68µs |
Tải xuống tài nguyên và chuẩn bị
Chương này sẽ giới thiệu mã ứng dụng và công cụ phần mềm được sử dụng, cũng như cách cấu hình thư mục và file con đường.
Thư viện chương trình cơ sở
Trước tiên, hãy đảm bảo rằng thư viện chương trình cơ sở Holtek HT32 đã được tải xuống trước khi sử dụng mã ứng dụng. Liên kết tải xuống được hiển thị bên dưới. Ở đây có 32 lựa chọn là HT0_M32p_Vyyyymmdd.zip cho dòng HT5F32xxxx và HT3_M32_Vyyyymmdd.zip cho dòng HT1FXNUMXxxxx. Tải xuống và giải nén mong muốn file.
Khóa kéo file chứa một số thư mục có thể được phân loại là Tài liệu, Thư viện chương trình cơ sở, Công cụ và các mục khác, đường dẫn vị trí của chúng được hiển thị trong Hình 5. Thư viện chương trình cơ sở HT32 zip file với một file tên của HT32_STD_xxxxx_FWLib_Vm.n.r_s.zip nằm trong thư mục Firmware_Library.
Hình 5. Nội dung HT32_M0p_Vyyyymmdd.zip
Mã ứng dụng
Tải xuống mã ứng dụng từ liên kết sau. Mã ứng dụng được đóng gói thành một zip file với một file tên của HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip. Nhìn thấy Hình 6 cho file quy ước tên.
Hình 6. Mã ứng dụng File Giới thiệu tên
Liên kết tải xuống: https://mcu.holtek.com.tw/ht32/app.fw/Module_UART/
File và cấu hình thư mục
Vì mã ứng dụng không chứa thư viện phần sụn HT32 files, mã ứng dụng và thư viện chương trình cơ sở được giải nén files nên được đặt vào đúng đường dẫn trước khi bắt đầu quá trình biên dịch. Zip mã ứng dụng file thường chứa một hoặc nhiều thư mục, chẳng hạn như ứng dụng và thư viện, như trong Hình 7. Đặt thư mục ứng dụng trong thư mục gốc của thư viện chương trình cơ sở HT32 để hoàn thành file cấu hình đường dẫn, như thể hiện trong Hình 8. Ngoài ra, giải nén mã ứng dụng và thư viện phần sụn HT32 đồng thời vào cùng một đường dẫn để đạt được kết quả cấu hình tương tự.
Hình 7. Nội dung HT32_APPFW_xxxxx_APPCODENAME_Vm.n.r_s.zip
Hình 8. Đường dẫn giải nén
Phần mềm đầu cuối
Mã ứng dụng có thể truyền thông báo qua cổng COM để thực hiện lựa chọn chức năng hoặc hiển thị trạng thái. Điều này yêu cầu phía máy chủ phải cài đặt trước phần mềm đầu cuối. Người dùng có thể lựa chọn phần mềm kết nối phù hợp, hoặc sử dụng phần mềm được cấp phép miễn phí như Tera Term. Trong mã ứng dụng, kênh UART được định cấu hình với độ dài từ là 8 bit, không có tính chẵn lẻ, 1 bit dừng và tốc độ truyền là 115200bps.
Mô tả chức năng
Chương này sẽ cung cấp mô tả chức năng cho mã ứng dụng, bao gồm thông tin về cấu trúc thư mục, kiến trúc API, mô tả cài đặt, v.v.
Cấu trúc thư mục
mã ứng dụng file chứa một thư mục ứng dụng. Lớp tiếp theo là thư mục “Module_UART” chứa hai chương trình ứng dụng, “UART_Module_Example” và “UART_Bridge”. liên quan files được liệt kê và mô tả dưới đây.
Bảng 2. Cấu trúc thư mục mã ứng dụng
Thư mục / File Tên | Sự miêu tả |
\\application\Module_UART\UART_Module_Example*1 | |
_TạoProject.bat | Tập lệnh hàng loạt để tạo dự án files |
_ProjectSource.ini | Khởi tạo file để thêm mã nguồn vào các dự án |
ht32_board_config.h | Cài đặt file liên quan đến việc gán I/O ngoại vi IC |
ht32fxxxxx_01_it.c | Chương trình dịch vụ ngắt file |
C chính | Mã nguồn chương trình chính |
\\application\Module_UART\UART_Bridge*2 | |
_TạoProject.bat | Tập lệnh hàng loạt để tạo dự án files |
_ProjectSource.ini | Khởi tạo file để thêm mã nguồn vào các dự án |
ht32_board_config.h | Cài đặt file liên quan đến việc gán I/O ngoại vi IC |
ht32fxxxxx_01_it.c | Chương trình dịch vụ ngắt file |
C chính | Mã nguồn của chương trình chính |
uart_bridge.h uart_bridge.c | tiêu đề cầu UART file và mã nguồn file |
\\tiện ích\phần mềm trung gian | |
uart_module.h*3 uart_module.c*3 | tiêu đề API file và mã nguồn file |
\\tiện ích\chung | |
ringbuffer.h ring_buffer.c | Tiêu đề bộ đệm vòng phần mềm file và mã nguồn file |
Ghi chú:
- Trong “UART_Module_Example”, các hoạt động đọc và ghi API được thực hiện theo cách vòng lặp, hãy tham khảo “Ví dụ sử dụng APIamples” để biết thêm chi tiết.
- Trong mã ứng dụng “UART_Bridge”, hai kênh UART, UART CH0 và UART CH1, được kích hoạt và giao thức truyền thông tùy chỉnh thông qua cấu trúc LỆNH được triển khai giữa hai thiết bị UART. Để biết thêm thông tin, hãy tham khảo “Hướng dẫn sử dụng APIampphần les ”.
- Mã ứng dụng cần sử dụng uart_module.c/h files có yêu cầu phiên bản thư viện chương trình cơ sở. Yêu cầu có thể thay đổi theo thời gian theo bản cập nhật. Để xác nhận yêu cầu phiên bản thư viện chương trình cơ sở hiện tại, hãy tham khảo nội dung kiểm tra tính phụ thuộc bằng cách tìm kiếm từ khóa “Kiểm tra tính phụ thuộc” trong tệp main.c file. Nếu phiên bản thư viện chương trình cơ sở không đáp ứng yêu cầu, hãy tải xuống phiên bản mới nhất từ liên kết được cung cấp trong phần “Thư viện chương trình cơ sở”.
Kiến trúc API
Mỗi API có một tham số quan trọng CH, đó là Kênh UART. Điều này xác định kênh UART nào sẽ được điều khiển. Hiện tại có tới bốn kênh UART được hỗ trợ và do đó bốn ký hiệu cố định được định nghĩa như sau. Chúng được sử dụng làm tham số CH cung cấp cơ sở cho các API để kiểm soát.
- UARTM_CH0: tham số đầu vào – điều khiển hoặc cấu hình UART CH0
- UARTM_CH1: tham số đầu vào – điều khiển hoặc cấu hình UART CH1
- UARTM_CH2: tham số đầu vào – điều khiển hoặc cấu hình UART CH2
- UARTM_CH3: tham số đầu vào – điều khiển hoặc cấu hình UART CH3
Không gian bộ nhớ sẽ không bị lãng phí nếu chỉ sử dụng một kênh UART. Điều này là do có thể đặt số lượng kênh UART được hỗ trợ và mã kênh UART không sử dụng sẽ bị bộ tiền xử lý loại bỏ để tăng dung lượng bộ nhớ khả dụng. Kiến trúc API được hiển thị trong Hình 9.
Hình 9. Sơ đồ khối kiến trúc API
Mỗi API bao gồm bốn nhóm cài đặt hoặc điều khiển liên quan đến kênh UART để người dùng chỉ cần nhập tham số CH mong muốn. Để cấu hình API liên quan, chỉ cần có thêm bảng tham số cấu hình cơ bản UART có dạng cấu trúc là USART_InitTypeDef. API sẽ triển khai cấu hình cơ bản của UART theo nội dung tham số trong bảng. Tham khảo phần “Mô tả API” để biết bảng cấu trúc cấu hình cơ bản của UART.
uart_module.c/.h files chỉ chứa ngắt (CHx_IRQ) và bảng trạng thái (CHx Status) của từng kênh UART trong khi tất cả các cài đặt cần thiết cho giao tiếp UART được cung cấp bởi ht32_board_config.h. Các thông số liên quan đến phần cứng trong ht32_board_config.h file được thể hiện trong bảng dưới đây. Thông tin chi tiết được cung cấp trong phần “Mô tả cài đặt”.
Các thông số liên quan đến phần cứng trong ht32_board_config.h bao gồm cài đặt I/O và cài đặt cổng UART vật lý, như sau.
Bảng 3. Định nghĩa Ký hiệu trong ht32_board_config.h
Biểu tượng | Sự miêu tả |
HTCFG_UARTM_CH0 | Tên cổng UART vật lý; Bán tạiamptập tin: UART0, UART1… |
HTCFG_UARTM0_TX_GPIO_PORT | Xác định tên cổng của TX cho CH0; Bán tạiample: A, B, C… |
HTCFG_UARTM0_TX_GPIO_PIN | Xác định số pin của TX cho CH0; Bán tạiamptối thiểu: 0~15 |
HTCFG_UARTM0_RX_GPIO_PORT | Xác định tên cổng của RX cho CH0; Bán tạiample: A, B, C… |
HTCFG_UARTM0_RX_GPIO_PIN | Xác định số pin của TX cho CH0; Bán tạiamptối thiểu: 0~15 |
HTCFG_UARTM0_TX_BUFFER_SIZE | Xác định kích thước bộ đệm TX cho CH0; Bán tạiample: 128 |
HTCFG_UARTM0_RX_BUFFER_SIZE | Xác định kích thước bộ đệm RX cho CH0; Bán tạiample: 128 |
Để sửa đổi cấu hình AFIO của kênh UART, hãy tham khảo bảng dữ liệu thiết bị có liên quan. Hiện tại, chỉ các định nghĩa I/O cho UART CH0 mới có hiệu lực do chỉ có UART CH0 được định cấu hình trong ht32_board_config.h. Để thêm UART CH1~3, các định nghĩa I/O của chúng cần được hoàn thành bằng cách tham khảo định nghĩa UART CH0 hoặc tham khảo phần “Sửa đổi cài đặt và các câu hỏi thường gặp”.
Có ba tính năng chính của kiến trúc API:
- Lên đến bốn kênh UART được hỗ trợ. Các tham số đầu vào của chúng là UARTM_CH0, UARTM_CH1, UARTM_CH2 và UARTM_CH3.
- Số lượng kênh UART có thể được đặt và các kênh không sử dụng sẽ không làm giảm dung lượng bộ nhớ khả dụng.
- Tất cả các cài đặt UART và định nghĩa I/O được tách biệt hoàn toàn khỏi các API. Điều này làm tăng sự thuận tiện trong quản lý của các giá trị cài đặt và giảm khả năng cài đặt không chính xác hoặc bị thiếu.
Cài đặt Mô tả
Phần này sẽ giới thiệu các cài đặt tham số trong ht32_board_config.h và uart_module.h files.
- ht32_board_config.h: Cái này file được sử dụng cho định nghĩa chân cắm và cài đặt liên quan đến bảng phát triển, bao gồm kênh IP UART (UART0, UART1, USART0…) được sử dụng bởi Bộ công cụ khởi động (SK), vị trí chân cắm TX/RX tương ứng và kích thước bộ đệm TX/RX. Hình 10 cho thấy nội dung cài đặt của HT32F52352 Starter Kit. Tùy thuộc vào sự tích hợp chức năng của quá trình phát triển, người dùng có thể tham khảo phần “Chỉ định chân cắm” trong biểu dữ liệu của thiết bị được sử dụng để thực hiện các định nghĩa chân cắm. Chi tiết khác về sửa đổi cài đặt sẽ được mô tả trong phần “Sửa đổi cài đặt và Câu hỏi thường gặp”.
Hình 10. Cài đặt ht32_board_config.h (HT32F52352)
- uart_module.h: Đây là tiêu đề API file được mã ứng dụng sử dụng, bao gồm cài đặt mặc định có liên quan, định nghĩa chức năng, v.v. Như minh họa trong Hình 11, nội dung cài đặt mặc định có thể bị ghi đè bởi các cấu hình bên ngoài, chẳng hạn như cài đặt trong ht32_board_config.h file.
Hình 11. Cài đặt mặc định trong uart_module.h
Mô tả API
- Mô tả kiểu dữ liệu mã ứng dụng.
- USART_InitTypeDef
Đây là cấu trúc cấu hình cơ bản của UART bao gồm các cấu hình BaudRate, WordLength, StopBits, Parity và Mode, như được hiển thị bên dưới.Biến đổi Tên Kiểu Sự miêu tả USART_Tốc độ truyền u32 Tốc độ truyền thông UART USART_Độ dài từ u16 Độ dài từ giao tiếp UART: 7, 8 hoặc 9 bit USART_StopBits u16 Độ dài bit dừng giao tiếp UART: 1 hoặc 2 bit USART_Tính chẵn lẻ u16 Tính chẵn lẻ giao tiếp UART: chẵn, lẻ, đánh dấu, dấu cách hoặc không có tính chẵn lẻ Chế độ USART_ u16 Chế độ giao tiếp UART; các API chỉ hỗ trợ chế độ bình thường
- USART_InitTypeDef
- Trước khi sử dụng các chức năng API, hãy hoàn thành cấu hình cơ bản của UART trong chương trình chính. Cấu hình cơ bản của UART cho mã ứng dụng này được hiển thị trong Hình 12. Ở đây, tốc độ truyền là 115200bps, độ dài từ là 8 bit, độ dài bit dừng là 1 bit và không có tính chẵn lẻ.
Hình 12. Cấu hình cơ bản của UART
- Hình 13 cho thấy các hàm API được khai báo trong uart_module.h file. Các bảng sau đây giải thích chức năng, tham số đầu vào và cách sử dụng các hàm API.
Hình 13. Khai báo hàm API trong uart_module.h
Tên | khoảng trống UARTM_Init(u32 CH, USART_InitTypeDef *pUART_Init, u32 uRxTimeOutValue) | |
Chức năng | Khởi tạo mô-đun UART | |
Đầu vào | CH | kênh UART |
pUART_Init | Con trỏ cấu trúc cấu hình cơ bản UART | |
uRxTimeOutValue | Giá trị hết thời gian UART RX FIFO. Khi RX FIFO nhận dữ liệu mới, bộ đếm sẽ đặt lại và khởi động lại. Khi bộ đếm đạt đến giá trị hết thời gian đặt trước và ngắt hết thời gian tương ứng đã được bật, ngắt hết thời gian chờ sẽ được tạo. | |
Cách sử dụng | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40);//Thực thi cấu hình cơ bản của UART//Tham khảo Hình 12 để biết cấu hình USART_InitStructure |
Tên | u32 UARTM_WriteByte(u32 CH, u8 uData) | |
Chức năng | Hoạt động ghi byte của mô-đun UART (TX) | |
Đầu vào | CH | kênh UART |
uData | Dữ liệu cần ghi | |
Đầu ra | THÀNH CÔNG | Thành công |
LỖI | Thất bại | |
Cách sử dụng | UARTM_WriteByte(UARTM_CH0, 'A'); //UART ghi 1 byte – 'A' |
Tên | u32 UARTM_Write(u32 CH, u8 *pBuffer, u32 uLength) | |
Chức năng | Thao tác ghi mô-đun UART (TX) | |
Đầu vào | CH | kênh UART |
bộ đệm | Con trỏ đệm | |
uChiều dài | Độ dài của dữ liệu được ghi | |
Đầu ra | THÀNH CÔNG | Thành công |
LỖI | Thất bại | |
Cách sử dụng | u8 Test[] = “Đây là bài kiểm tra!\r\n”; UARTM_Write(UARTM_CH0, Kiểm tra, sizeof(Kiểm tra) -1); // UART ghi dữ liệu pBuffer |
Tên | u32 UARTM_ReadByte(u32 CH, u8 *pData) | |
Chức năng | Hoạt động đọc byte mô-đun UART (RX) | |
Đầu vào | CH | kênh UART |
pData | Địa chỉ để đặt dữ liệu đọc | |
Đầu ra | THÀNH CÔNG | Thành công |
LỖI | Không thành công (không có dữ liệu) | |
Cách sử dụng | u8 Dữ liệu tạm thời; if (UARTM_ReadByte(UARTM_CH0, &TempData) == SUCCESS){UARTM_WriteByte(UARTM_CH0, TempData);}//Nếu UARTM_ReadByte() trả về THÀNH CÔNG thì UART ghi byte dữ liệu này |
Tên | u32 UARTM_Read(u32 CH, u8 *pBuffer, u32 uLength) | |
Chức năng | Hoạt động đọc mô-đun UART (RX) | |
Đầu vào | CH | kênh UART |
bộ đệm | Con trỏ đệm | |
uChiều dài | Độ dài của dữ liệu được đọc | |
Đầu ra | Đọc đếm | Độ dài của dữ liệu đã được đọc |
Cách sử dụng | u8 Test2[10]; len u32; Len = UARTM_Read(UARTM_CH0, Test2, 5);if (Len > 0){UARTM_Write(UARTM_CH0, Test2, Len);}//UARTM_Read() đọc 5 byte dữ liệu và lưu trữ dữ liệu vào Test2 và chỉ định số lượng byte đã đọc to Len // Ghi dữ liệu có nguồn gốc từ Test2 |
Tên | u32 UARTM_GetReadBufferLength(u32 CH) | |
Chức năng | Lấy độ dài bộ đệm đọc (RX) | |
Đầu vào | CH | kênh UART |
Đầu ra | uChiều dài | Đọc chiều dài bộ đệm |
Cách sử dụng | UARTM_Init(UARTM_CH0, &USART_InitStructure, 40); //Khởi tạo module UART while (UARTM_GetReadBufferLength(UARTM_CH0) < 5);//Chờ cho đến khi UARTM_ReadBuffer nhận được 5 byte dữ liệu |
Tên | u32 UARTM_GetWriteBufferLength(u32 CH) | |
Chức năng | Lấy độ dài bộ đệm ghi (TX) | |
Đầu vào | CH | kênh UART |
Đầu ra | uChiều dài | Viết chiều dài bộ đệm |
Tên | u8 UARTM_IsTxFinished(u32 CH) | |
Chức năng | Nhận trạng thái TX | |
Đầu vào | CH | kênh UART |
Đầu ra | ĐÚNG VẬY | Trạng thái TX: đã hoàn thành |
SAI | Trạng thái TX: chưa hoàn thành | |
Cách sử dụng | UARTM_WriteByte(UARTM_CH0, 'O'); #if 1 // “uart_module.c” SVN >= 525 requiredwhile (UARTM_IsTxFinished(UARTM_CH0) == FALSE) #elsewhile (1) #endif // API này có thể được sử dụng để kiểm tra trạng thái TX, như được hiển thị ở trên; đợi cho đến khi API UARTM_WriteByte() kết thúc, nghĩa là trạng thái TX là TRUE, sau đó tiếp tục các hành động tiếp theo.//Một hạn chế được thêm vào vì chức năng này chưa được thêm cho đến khi số phiên bản SVN trong uart_module.c là 525. |
Tên | vô hiệu UARTM_DiscardReadBuffer(u32 CH) | |
Chức năng | Loại bỏ dữ liệu trong bộ đệm đọc | |
Đầu vào | CH | kênh UART |
Sử dụng API cũamptập
Phần này sẽ chứng minh API viết và đọc exampcác tập tin của mã ứng dụng “Module_UART” bằng cách sử dụng quy trình khởi tạo và “UART_Module_Example” quy trình mã ứng dụng. Trước khi sử dụng API, người dùng cần bao gồm tiêu đề API file vào mã nguồn chương trình chính file (#include “phần mềm trung gian/uart_module.h”).
Như thể hiện trong Hình 14, khi bước vào quá trình khởi tạo, trước tiên hãy xác định cấu trúc cấu hình cơ bản của UART. Sau đó định cấu hình các thành viên cấu trúc cấu hình cơ bản của UART bao gồm BaudRate, WordLength, StopBits, Parity và Mode. Cuối cùng, hãy gọi chức năng khởi tạo API, việc hoàn thành chức năng này cho biết quá trình khởi tạo đã kết thúc. Sau đó, người dùng có thể tiếp tục các thao tác ghi và đọc dựa trên cấu hình cơ bản UART đã đặt trước.
Hình 14. Lưu đồ khởi tạo
“UART_Module_Exampmã ứng dụng le” thể hiện các hoạt động đọc và ghi API theo cách lặp lại. Lưu đồ cho điều này được hiển thị trong Hình 15. Các hàm API được sử dụng bao gồm UARTM_WriteByte(), UARTM_Write(), UARTM_ReadByte(), UARTM_Read() và UARTM_GetReadBufferLength(). Mô tả của chúng được cung cấp trong phần “Mô tả API”.
Hình 15. Sơ đồ Ghi và Đọc Examptập
Có một mã ứng dụng “UART_Bridge” khác trong thư mục “Module_UART” có liên quan file mô tả được giới thiệu trong phần “Cấu trúc thư mục”. Mã ứng dụng “UART_Bridge” kích hoạt hai kênh UART, UART CH0 và UART CH1, sau đó tùy chỉnh giao thức liên lạc giữa hai thiết bị UART thông qua cấu trúc LỆNH, gCMD1 và gCMD2. Chúng được định nghĩa trong uart_bridge.c, như được hiển thị bên dưới. UARTBridge_CMD1TypeDef gCMD1:
Biến đổi Tên | Kiểu | Sự miêu tả |
uTiêu đề | u8 | Tiêu đề |
uCmd | u8 | Yêu cầu |
uData[3] | u8 | Dữ liệu |
UARTBridge_CMD2TypeDef gCMD2:
Biến đổi Tên | Kiểu | Sự miêu tả |
uTiêu đề | u8 | Tiêu đề |
uCmdA | u8 | Lệnh A |
uCmdB | u8 | Lệnh B |
uData[3] | u8 | Dữ liệu |
Trong mã ứng dụng “UART_Bridge”, hãy sử dụng gCMD1 để nhận dữ liệu dưới dạng gói lệnh rồi phân tích dữ liệu đó. Sau đó, theo giao thức truyền thông tùy chỉnh, hãy đặt gCMD2 làm gói phản hồi và truyền nó. Sau đây là một exampcủa gói lệnh gCMD1) và gói phản hồi (gCMD2). Gói lệnh (UARTBridge_CMD1TypeDef gCMD1):
byte 0 | byte 1 | Byte 2 ~ Byte 4 |
uTiêu đề | uCmd | uData [3] |
"MỘT" | “1” | "XYZ" |
Gói phản hồi (UARTBridge_CMD2TypeDef gCMD2):
byte 0 | byte 1 | byte 2 | Byte 3 ~ Byte 5 |
uTiêu đề | uCmdA | uCmdB | uData [3] |
“B” | "Một" | “1” | "XYZ" |
Nghề tài nguyên
Lấy HT32F52352 làm thiết bị cũample, tài nguyên do mô-đun UART chiếm giữ được hiển thị bên dưới.
HT32F52352 | |
Dung lượng ROM | 946 Byte |
Kích thước RAM | 40*1 + 256*2 Byte |
Ghi chú:
- Các biến toàn cục bao gồm cờ và trạng thái cho một kênh chiếm 40 byte RAM.
- Đây là điều kiện trong đó một kênh được sử dụng và kích thước bộ đệm TX/RX là 128/128 byte. Kích thước bộ đệm có thể được đặt theo yêu cầu của ứng dụng.
Bảng 4. Mã ứng dụng Tài nguyên Nghề nghiệp
- Môi trường biên dịch: MDK-Arm V5.36, ARMCC V5.06 cập nhật 7 (bản dựng 960)
- Tùy chọn tối ưu hóa: Cấp 2 (-O2)
Hướng dẫn sử dụng
Chương này sẽ giới thiệu việc chuẩn bị môi trường cho mã ứng dụng “Module_UART”, cũng như các bước biên dịch và kiểm tra.
Chuẩn bị môi trường
Phần cứng và phần mềm cần thiết cho mã ứng dụng “Module_UART” được liệt kê bên dưới.
Bảng 5. Chuẩn bị môi trường phần cứng/phần mềm
Phần cứng/Phần mềm | Đếm | Ghi chú |
Bộ khởi động | 1 | Ghi chú ứng dụng này sử dụng Bộ khởi động HT32F52352 làm ví dụ cũample |
Cáp USB | 1 | Micro USB, kết nối với PC |
Mã ứng dụng | — | Đường dẫn tải xuống, file và cấu hình thư mục được giới thiệu trong phần “Chuẩn bị và tải xuống tài nguyên”. Đường dẫn: “\\application\Module_UART\UART_Module_Example ” |
Thuật ngữ Tera | — | Tham khảo phần “Phần mềm đầu cuối” |
Keil IDE | — | Keil uVision V5.xx |
Đầu tiên, sử dụng HT32F52352 Starter Kit kết hợp với chức năng Virtual COM Port (VCP) của e-Link32 Lite để giới thiệu ứng dụng UART. Điều này đòi hỏi phải thực hiện việc chuẩn bị môi trường sau đây:
- Có hai giao diện USB trên bảng. Sử dụng cáp USB để kết nối PC và giao diện eLink32 Lite trên bo mạch như trong Hình 16-(a).
- Vì mã ứng dụng cần sử dụng chức năng Cổng COM ảo (VCP) e-Link32 Lite, hãy đảm bảo rằng PAx*2 và DAP_Tx của UART Jumper-J2*1 đã được rút ngắn bằng cách sử dụng một jumper. Vị trí J2 được chỉ ra trong Hình 16-(b).
Ghi chú
- J2 trên Starter Kit có hai tùy chọn, rút ngắn PAx và DAP_Tx hoặc rút ngắn PAx và RS232_Tx. Tham khảo hướng dẫn sử dụng Starter Kit để biết các chức năng cài đặt chi tiết.
- Vị trí chân cắm MCU UART RX trên các Bộ công cụ khởi động khác nhau là khác nhau. người yêu cũ nàyample sử dụng PAx để chỉ ra chân RX.
Hình 16. Sơ đồ khối Bộ khởi động HT32
Bây giờ, hãy sử dụng bảng mục tiêu người dùng kết hợp với chức năng Cổng COM ảo (VCP) của e-Link32 Pro để giới thiệu ứng dụng UART. Điều này đòi hỏi phải thực hiện việc chuẩn bị môi trường sau đây:
- Một mặt của e-Link32 Pro được kết nối với PC bằng cáp Mini USB và mặt còn lại được kết nối với bo mạch đích của người dùng thông qua cáp màu xám 10 bit. Kết nối giữa các giao diện SWD của cáp và bo mạch đích được thực hiện bằng cách sử dụng các đường Dupont, như trong Hình 17-(a).
- Các chân giao tiếp nối tiếp của e-Link32 Pro là Chân#7 VCOM_RXD và Chân#8- VCOM_TXD. Chúng phải được kết nối với các chân TX và RX của bảng mục tiêu người dùng, như trong Hình 17-(b).
Hình 17. Sơ đồ khối bo mạch mục tiêu người dùng e-Link32 Pro +
Biên soạn và thử nghiệm
Phần này sẽ lấy “application\Module_UART\UART_Module_Example” với tư cách là người yêu cũample để giới thiệu quá trình biên dịch và thử nghiệm. Trước đó, hãy đảm bảo rằng tất cả các bước chuẩn bị được mô tả trong phần trước đã được thực hiện và phần mềm đầu cuối Tera Term đã được tải xuống.
Các bước hoạt động chi tiết được tóm tắt dưới đây.
Bước 1. Kiểm tra bật nguồn
Thiết lập môi trường phần cứng như được mô tả trong phần trước. Sau khi bật nguồn, đèn LED nguồn D9 ở phía dưới bên trái của Bộ khởi động sẽ sáng. Đèn LED USB D1 trên e-Link32 Lite ở phía trên bên phải sẽ sáng sau khi quá trình liệt kê USB hoàn tất. Nếu D1 không sáng sau một thời gian dài, hãy xác nhận xem cáp USB có thể giao tiếp hay không. Nếu không thì hãy gỡ bỏ nó và chèn lại.
Bước 2. Tạo dự án
Mở ứng dụng\Module_UART\UART_Module_Example, nhấp vào _CreateProject.bat file để tạo một dự án, như thể hiện trong Hình 18. Vì lưu ý ứng dụng này sử dụng HT32F52352 Starter Kit, hãy mở dự án Keil IDE “Project_52352.uvprojx” nằm trong thư mục MDK_ARMv5.
Hình 18. Thực thi _CreateProject.bat để tạo dự án
Bước 3. Biên dịch và lập trình
Sau khi dự án đã được mở, trước tiên hãy nhấp vào “Xây dựng” (hoặc sử dụng phím tắt “F7”), sau đó nhấp vào “Tải xuống” (hoặc sử dụng phím tắt “F8”). Sau đó, kết quả xây dựng và tải xuống sẽ được hiển thị trong cửa sổ Đầu ra bản dựng. Xem Hình 19.
Hình 19. Kết quả xây dựng và tải xuống
Bước 4. Mở phần mềm Tera Term và cấu hình cổng nối tiếp
Mở phần mềm Tera Term và cổng COM. Hãy chú ý xem số cổng COM được tạo bởi Starter Kit có chính xác hay không. Sau đó click vào “Setup >> Serial Port” để vào giao diện cấu hình. Cấu hình giao diện UART của mã ứng dụng “Module_UART” được mô tả trong phần “Phần mềm đầu cuối”. Kết quả thiết lập được hiển thị trong Hình 20.
Hình 20. Kết quả thiết lập cổng nối tiếp thời hạn Tera
Bước 5. Reset hệ thống và kiểm tra
Nhấn phím đặt lại SK – Đặt lại B1. Sau đó, một "ABCĐây là bài kiểm tra!" tin nhắn sẽ là
được truyền qua API và sẽ được hiển thị trong cửa sổ Tera Term, như thể hiện trong Hình 21. Về chức năng nhận, khi nhập dữ liệu vào cửa sổ Tera Term, API liên quan sẽ được sử dụng để xác định độ dài bộ đệm nhận. Khi dữ liệu PC nhận được đạt 5 byte, 5 byte dữ liệu nhận được sẽ được gửi đi tuần tự. Như trong Hình 22, dữ liệu được nhập tuần tự là “1, 2, 3, 4, 5”, được nhận và xác định thông qua API. Sau đó, dữ liệu “1, 2, 3, 4, 5” sẽ được in sau năm đầu vào.
Hình 21. Kiểm tra chức năng mã ứng dụng “Module_UART” – Truyền
Hình 22. Kiểm tra chức năng mã ứng dụng “Module_UART” – Nhận
Hướng dẫn cấy ghép
Phần này sẽ giới thiệu cách tích hợp API vào dự án của người dùng.
Bước 1. Thêm uart_module.c file vào dự án. Nhấp chuột phải vào thư mục Người dùng. Chọn “Thêm hiện có Files vào Nhóm 'Người dùng'…”, sau đó chọn uart_module.c file và nhấp vào “Add”, như thể hiện trong Hình 23. Tham khảo phần “Cấu trúc thư mục” để biết file mô tả đường dẫn.
Hình 23. Thêm uart_module.c File đến dự án
Bước 2. Thêm ring_buffer.c file vào dự án. Nhấp chuột phải vào thư mục Người dùng. Chọn “Thêm hiện có Files vào Nhóm 'Người dùng'…”, sau đó chọn ring_buffer.c file và nhấp vào “Thêm”, như thể hiện trong Hình 24.\ Tham khảo phần “Cấu trúc thư mục” để biết file mô tả đường dẫn.
Hình 24. Thêm ring_buffer.c File đến dự án
Bước 3. Bao gồm tiêu đề API file vào phần đầu của main.c, như trong Hình 25. (Ext: #include “middleware/uart_module.h”)
Hình 25. Bao gồm Tiêu đề API File đến chính.c
Bước 4. Triển khai các cài đặt cần thiết cho giao tiếp UART bằng cách sử dụng ht32_board_config.h file. Điều này được giới thiệu chi tiết trong phần “Mô tả cài đặt” và “Sửa đổi cài đặt và các câu hỏi thường gặp”.
Cài đặt sửa đổi và câu hỏi thường gặp
Phần này sẽ giới thiệu cách sửa đổi cài đặt UART và giải thích một số câu hỏi phổ biến gặp phải trong quá trình sử dụng.
Thay đổi chỉ định chân UART
- Tham khảo chương “Gán chân cắm” của Bảng dữ liệu HT32F52352, hãy tra cứu bảng Ánh xạ chức năng thay thế liệt kê các chức năng AFIO của loại thiết bị. Đối với các chân liên quan đến UART, hãy tham khảo cột “AF6 USART/UART”, như trong Hình 26.
Hình 26. Bảng ánh xạ chức năng thay thế HT32F52352
- Bước này sẽ hướng dẫn người dùng xác định vị trí các chân UART tương ứng bằng bảng trên. HT32F52352 cũamptập tin sử dụng USART1 làm kênh mặc định. Ở đây, các chân TX và RX là USR1_TX và USR1_RX và được đặt trên PA4 và PA5 tương ứng. Hình 27 cho thấy sự tương ứng về chân cũng như định nghĩa về chân trong “ht32_board_config.h”. Các trường trống của “Gói” trong bảng gán chân có nghĩa là không có GPIO liên quan trong gói này. Để sửa đổi các chân UART, hãy tìm vị trí chân đích và xác định lại các chân bằng cách sử dụng “ht32_board_config.h” file.
Hình 27. Tương ứng chân cắm và Sửa đổi cài đặt
Thêm một kênh UART
Lấy HT32F52352 HTCFG_UARTM_CH1 làm cũample, here mô tả cách thêm kênh UART mới.
Sửa đổi ht32_board_config.h file
Tham khảo chương “Gán chân cắm” của Bảng dữ liệu HT32F52352, hãy tra cứu bảng Ánh xạ chức năng thay thế liệt kê các chức năng AFIO của loại thiết bị. Vì USART1 đã được sử dụng làm HTCFG_UARTM_CH0 nên HTCFG_UARTM_CH1 mới được thêm vào có thể chọn USART0. Ở đây, các chân TX và RX lần lượt được đặt trên PA2 và PA3, như thể hiện ở nửa trên của Hình 28. Các sửa đổi tương ứng được thực hiện bằng cách sử dụng các dòng mã 120~126 trong ht32_board_config.h, như được hiển thị bằng hộp chấm màu đỏ trong Hình 28.
Hình 28. Thêm Kênh UART
Câu hỏi thường gặp
Q: Trong bước 5 của phần Biên dịch và Kiểm tra, kiểm tra chức năng truyền là bình thường. Đây, "ABCĐây là bài kiểm tra!" thông báo đã được hiển thị thành công, tuy nhiên đối với chức năng nhận, tại sao năm giá trị đầu vào không được trả về và hiển thị?
A: Kiểm tra xem các chân MCU UART RX và DAP_Tx của UART Jumper-J2 có bị đoản mạch bằng cách sử dụng một jumper hay không. Vì mã ứng dụng “Module_UART” cần sử dụng Cổng COM ảo (VCP) của e-Link32 Lite, nên áp dụng cài đặt đoản mạch cho hai chân bên trái của UART Jumper-J2, như thể hiện trong Hình 29.
Hình 29. Cài đặt UART Jumper-J2
Hỏi: Sau thực hiện “Build” (hoặc phím tắt “F7”), một thông báo lỗi xuất hiện cho biết phiên bản thư viện chương trình cơ sở cũ hơn phiên bản được yêu cầu? Xem Hình 30.
A: Việc triển khai mã ứng dụng “Module_UART” cần bao gồm uart_module.c/h files có yêu cầu đối với một phiên bản thư viện chương trình cơ sở nhất định. Khi một thông báo lỗi như vậy xuất hiện, điều đó có nghĩa là thư viện chương trình cơ sở hiện đang sử dụng là phiên bản cũ hơn. Do đó, cần phải tải xuống phiên bản mới nhất thông qua liên kết được cung cấp trong phần “Thư viện chương trình cơ sở”.
Hình 30. Thông báo lỗi phiên bản thư viện chương trình cơ sở
Phần kết luận
Tài liệu này cung cấp phần giới thiệu cơ bản để hỗ trợ người dùng hiểu rõ hơn về mã ứng dụng “Module_UART” và giao thức truyền thông UART. Tiếp theo là quá trình tải xuống và chuẩn bị tài nguyên. Chương Mô tả chức năng đã giới thiệu file cấu trúc thư mục, kiến trúc API, mô tả API và sử dụng API cũamples. Chương Hướng dẫn sử dụng đã trình bày việc chuẩn bị môi trường, biên dịch và thử nghiệm mã ứng dụng “Module_UART”. Nó cũng cung cấp các hướng dẫn để ghép mã và cài đặt sửa đổi cũng như giải thích một số vấn đề phổ biến có thể gặp phải. Tất cả những điều này kết hợp sẽ cho phép người dùng nhanh chóng hiểu cách sử dụng API và sau đó giảm thời gian bắt đầu.
Tài liệu tham khảo
Để biết thêm thông tin, hãy tham khảo Holtek webtrang web: www.holtek.com
Phiên bản và Thông tin sửa đổi
Ngày | Tác giả | Giải phóng | Thông tin sửa đổi |
2022.04.30 | 蔡期育(Chi-Yu Tsai) | V1.00 | Phiên bản đầu tiên |
Tuyên bố miễn trừ trách nhiệm
Tất cả thông tin, nhãn hiệu, biểu trưng, đồ họa, video, đoạn âm thanh, liên kết và các mục khác xuất hiện trên này website ('Thông tin') chỉ mang tính chất tham khảo và có thể thay đổi bất kỳ lúc nào mà không cần thông báo trước và theo quyết định của Holtek Semiconductor Inc. và các công ty liên quan (sau đây gọi là 'Holtek', 'công ty', 'chúng tôi', ' chúng tôi hoặc chúng ta'). Trong khi Holtek cố gắng đảm bảo tính chính xác của Thông tin về điều này webtrang web, Holtek không có bảo đảm rõ ràng hay ngụ ý nào về tính chính xác của Thông tin. Holtek sẽ không chịu trách nhiệm về bất kỳ sự không chính xác hoặc rò rỉ nào.
Holtek sẽ không chịu trách nhiệm đối với bất kỳ thiệt hại nào (bao gồm nhưng không giới hạn ở vi rút máy tính, sự cố hệ thống hoặc mất dữ liệu) bất kỳ phát sinh nào trong việc sử dụng hoặc liên quan đến việc sử dụng webtrang web của bất kỳ bên nào. Có thể có các liên kết trong khu vực này, cho phép bạn truy cập vào webtrang web của các công ty khác.
Những cái này webcác trang web không được Holtek kiểm soát. Holtek sẽ không chịu trách nhiệm và không đảm bảo đối với bất kỳ Thông tin nào được hiển thị tại các trang web đó. Siêu liên kết đến khác webcác trang web có nguy cơ của riêng bạn.
Giới hạn trách nhiệm
Trong mọi trường hợp, Holtek Limited sẽ không chịu trách nhiệm pháp lý với bất kỳ bên nào khác về bất kỳ tổn thất hoặc thiệt hại nào hoặc bất kỳ nguyên nhân nào gây ra trực tiếp hoặc gián tiếp liên quan đến việc bạn truy cập hoặc sử dụng tài liệu này. webtrang web, nội dung trên đó hoặc bất kỳ hàng hóa, tài liệu hoặc dịch vụ nào.
Luật quản lý
Tuyên bố miễn trừ trách nhiệm có trong webtrang web sẽ được quản lý và giải thích theo luật pháp của Trung Hoa Dân Quốc. Người dùng sẽ tuân theo quyền tài phán không độc quyền của tòa án Trung Hoa Dân Quốc.
Cập nhật tuyên bố từ chối trách nhiệm
Holtek có quyền cập nhật Tuyên bố từ chối trách nhiệm bất kỳ lúc nào có hoặc không có thông báo trước, tất cả các thay đổi có hiệu lực ngay sau khi đăng lên webđịa điểm.
Tài liệu / Tài nguyên
![]() |
Ứng dụng UART HOLTEK HT32 MCU Lưu ý [tập tin pdf] Hướng dẫn sử dụng HT32 MCU, Ghi chú ứng dụng UART, HT32 MCU UART, Ghi chú ứng dụng, HT32, Ghi chú ứng dụng MCU UART, Ghi chú ứng dụng HT32 MCU UART |