UART là viết tắt của Universal Asynchronous Receiver – Transmitter, tạm dịch là truyền nhận bất đồng bộ. Trên máy tính thì chúng ta có thể hiểu nôm na là giao tiếp qua cổng COM. Các máy tính hiện nay nếu không có cổng COM thì chúng ta có thể sử dụng các thiết bị chuyển giao tiếp USB => COM.
UART trên STM32F103C8T6 còn được gọi là TTL serial, giao thức này sử dụng mức tín hiệu giới hạn trong mức 0V - Vcc, nếu vi điều khiển 3.3V thì mức giới hạn là 0V-3.3V.
Cổng COM trên máy tính có mức tín hiệu dao động -13V đến +13V. Cho nên bạn không thể nối trực tiếp từ vi điều khiển đến cổng COM máy tính nhé. Thay vào đó có thể sử dụng chip chuyển mức tín hiệu như là MAX232 chẳng hạn (google với từ khóa RS232 to TTL).
Hoặc bạn cũng có thể sử dụng một mạch chuyển đổi USB to TTL serial (FT232RL).
Board mà chúng ta sử dụng trong bài viết này sẽ là kit ra chân của STM32F103C8T6 như hình dưới, board này còn có tên gọi là blue pill.
Để nạp chương trình cho board này chúng ta cần có mạch nạp STLINK V2 MINI
STM32F103C8T6 có 3 cổng UART
Tx là chân gửi, Rx là chân nhận. Chân gửi của thiết bị này phải nối vào chân nhận của thiết bị khác và ngược lại nhé.
Bây giờ chúng ta sẽ tiến hành viết code và nạp cho kit ra chân STM32F103C8T6
Phần cứng cần thiết bao gồm FT232RL, Blue pill, và mạch nạp stlink v2 mini.
Phần mềm chúng ta sẽ sử dụng:
Atollic TrueSTUDIO (https://atollic.com/truestudio) để viết code.
STM32CubeMX (https://www.st.com/en/development-tools/stm32cubemx.html) để cấu hình các chân sử dụng.
STM32 ST-LINK Utility (https://www.st.com/en/development-tools/stsw-link004.html) để nạp code.
Termite (https://www.compuphase.com/software_termite.htm) để gửi nhận data với board từ máy tính.
Các bước thực hiện
1. Mở STM32CubeMX, chọn New Project, sau đó double click chọn STM32F103C8
2. Trong STM32CubeMX, tab Pinout, mở Configuration > Peripherals, mục SYS chọn Debug là Serial Wire. Mục USART1 chọn là Asynchronous. Click vào chân PC13 chọn là GPIO_Output
3. Mở tab Configuration, click vào NVIC rồi check chọn USART1 global interrupt
4. Trong menu Project > Settings, đặt tên dự án ở mục Project Name. Mục Toolchain / IDE chọn là TrueSTUDIO, bỏ chọn mục Generate Under Root
5. Chọn menu Project > Generate Code để sinh ra mã nguồn sử dụng với Atollic TrueSTUDIO.
6. Mở dự án với Atollic, vào menu Project > Build Settings... sau đó chọn convert output to HEX file như hình dưới đây
7. Để gửi dữ liệu đi chúng ta dùng hàm HAL_UART_Transmit như sau
uint8_t data[] = "HELLO WORLD\n";
HAL_UART_Transmit(&huart1, data, sizeof(data), 100);
8. Để nhận dữ liệu chúng ta sử dụng hàm HAL_UART_Receive_IT kết hợp với hàm HAL_UART_RxCpltCallback.
Trong ví dụ này chúng ta sẽ làm ứng dụng điều khiển tắt bật đèn LED gắn với chân PC13. Chân này nếu ở mức thấp đèn LED sẽ tắt, nếu ở mức cao đèn LED sẽ sáng.
Lệnh bật tắt đèn sẽ được gửi xuống board từ máy tính thông FT232RL. Một lệnh sẽ kết thúc bằng ký tự <enter>. Board nhận được lệnh gì sẽ gửi trả lại máy tính đúng dữ liệu nhận được, đồng thời nếu lệnh là "on" thì sẽ bật đèn, "off" thì sẽ tắt đèn LED.
Mã nguồn đầy đủ có thể tham khảo tại đây https://drive.google.com/open?id=1RlqKP1AIRIEl24vrL3V8Ur5ua7LcS1_e
9. Biên dịch dự án sẽ tạo ra file .hex, sau đó kết nối mạch nạp và FT232RL
[Blue pill] GND <===> [STLINK] GND
[Blue pill] DCLK <===> [STLINK] SWCLK
[Blue pill] DIO <===> [STLINK] SWDIO
[Blue pill] 3.3V <===> [STLINK] GND
FT232RL chuyển jumper sang mức 3.3V và kết nối như sau
[FT232RL] GND <===> [Blue pill] GND
[FT232RL] RX <===> [Blue pill] PA9
[FT232RL] TX <===> [Blue pill] PA10
10. Cắm STLINK và FT232RL vào cổng usb và cài driver nếu cần thiết. Mở phần mềm STM32 ST-LINK Utility, chọn connect với board STM32F103C8T6, sau đó chọn file .hex để download xuống board
11. Mở phần mềm termite và gửi lệnh xuống để xem kết quả
UART trên STM32F103C8T6 còn được gọi là TTL serial, giao thức này sử dụng mức tín hiệu giới hạn trong mức 0V - Vcc, nếu vi điều khiển 3.3V thì mức giới hạn là 0V-3.3V.
Cổng COM trên máy tính có mức tín hiệu dao động -13V đến +13V. Cho nên bạn không thể nối trực tiếp từ vi điều khiển đến cổng COM máy tính nhé. Thay vào đó có thể sử dụng chip chuyển mức tín hiệu như là MAX232 chẳng hạn (google với từ khóa RS232 to TTL).
Hoặc bạn cũng có thể sử dụng một mạch chuyển đổi USB to TTL serial (FT232RL).
Board mà chúng ta sử dụng trong bài viết này sẽ là kit ra chân của STM32F103C8T6 như hình dưới, board này còn có tên gọi là blue pill.
Để nạp chương trình cho board này chúng ta cần có mạch nạp STLINK V2 MINI
STM32F103C8T6 có 3 cổng UART
Tx là chân gửi, Rx là chân nhận. Chân gửi của thiết bị này phải nối vào chân nhận của thiết bị khác và ngược lại nhé.
Bây giờ chúng ta sẽ tiến hành viết code và nạp cho kit ra chân STM32F103C8T6
Phần cứng cần thiết bao gồm FT232RL, Blue pill, và mạch nạp stlink v2 mini.
Phần mềm chúng ta sẽ sử dụng:
Atollic TrueSTUDIO (https://atollic.com/truestudio) để viết code.
STM32CubeMX (https://www.st.com/en/development-tools/stm32cubemx.html) để cấu hình các chân sử dụng.
STM32 ST-LINK Utility (https://www.st.com/en/development-tools/stsw-link004.html) để nạp code.
Termite (https://www.compuphase.com/software_termite.htm) để gửi nhận data với board từ máy tính.
Các bước thực hiện
1. Mở STM32CubeMX, chọn New Project, sau đó double click chọn STM32F103C8
2. Trong STM32CubeMX, tab Pinout, mở Configuration > Peripherals, mục SYS chọn Debug là Serial Wire. Mục USART1 chọn là Asynchronous. Click vào chân PC13 chọn là GPIO_Output
3. Mở tab Configuration, click vào NVIC rồi check chọn USART1 global interrupt
4. Trong menu Project > Settings, đặt tên dự án ở mục Project Name. Mục Toolchain / IDE chọn là TrueSTUDIO, bỏ chọn mục Generate Under Root
5. Chọn menu Project > Generate Code để sinh ra mã nguồn sử dụng với Atollic TrueSTUDIO.
6. Mở dự án với Atollic, vào menu Project > Build Settings... sau đó chọn convert output to HEX file như hình dưới đây
7. Để gửi dữ liệu đi chúng ta dùng hàm HAL_UART_Transmit như sau
uint8_t data[] = "HELLO WORLD\n";
HAL_UART_Transmit(&huart1, data, sizeof(data), 100);
8. Để nhận dữ liệu chúng ta sử dụng hàm HAL_UART_Receive_IT kết hợp với hàm HAL_UART_RxCpltCallback.
Trong ví dụ này chúng ta sẽ làm ứng dụng điều khiển tắt bật đèn LED gắn với chân PC13. Chân này nếu ở mức thấp đèn LED sẽ tắt, nếu ở mức cao đèn LED sẽ sáng.
Lệnh bật tắt đèn sẽ được gửi xuống board từ máy tính thông FT232RL. Một lệnh sẽ kết thúc bằng ký tự <enter>. Board nhận được lệnh gì sẽ gửi trả lại máy tính đúng dữ liệu nhận được, đồng thời nếu lệnh là "on" thì sẽ bật đèn, "off" thì sẽ tắt đèn LED.
Mã nguồn đầy đủ có thể tham khảo tại đây https://drive.google.com/open?id=1RlqKP1AIRIEl24vrL3V8Ur5ua7LcS1_e
9. Biên dịch dự án sẽ tạo ra file .hex, sau đó kết nối mạch nạp và FT232RL
[Blue pill] GND <===> [STLINK] GND
[Blue pill] DCLK <===> [STLINK] SWCLK
[Blue pill] DIO <===> [STLINK] SWDIO
[Blue pill] 3.3V <===> [STLINK] GND
FT232RL chuyển jumper sang mức 3.3V và kết nối như sau
[FT232RL] GND <===> [Blue pill] GND
[FT232RL] RX <===> [Blue pill] PA9
[FT232RL] TX <===> [Blue pill] PA10
10. Cắm STLINK và FT232RL vào cổng usb và cài driver nếu cần thiết. Mở phần mềm STM32 ST-LINK Utility, chọn connect với board STM32F103C8T6, sau đó chọn file .hex để download xuống board
11. Mở phần mềm termite và gửi lệnh xuống để xem kết quả
Comments
Post a Comment