Site icon TAPIT

Hướng dẫn retarget/redirect hàm printf để sử dụng cho UART trên KeilC

Nhiều bạn lập trình nhúng khi phát triển hoặc debug chương trình thường có suy nghĩ sử dụng các hàm trong thư viện chuẩn của C như printf() để gửi dữ liệu thông qua giao tiếp UART đến máy tính và hiển thị trên các phần mềm như Terminal, Hercules hoặc giao tiếp với các module khác…Nếu có thể sử dụng được hàm printf() thì giao tiếp UART sẽ trở nên đơn giản và quen thuộc hơn. Vậy làm thế nào để có thể sử dụng hàm printf() trong Keil C, cụ thể hơn là cho vi điều khiển lõi ARM -STM32F103C8T6. Trong bài viết này, mình sẽ gửi một số hướng dẫn đến để có thể sử dụng hàm printf() khi giao tiếp UART.

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M] 

  1/ Sử dụng hàm printf cho giao tiếp UART trong Keil C:

Bước 1:

Mở CubeMX chọn chip STM32F103C8 để bắt đầu một Project mới

Bước 2:

Cấu hình nạp code ở SYS sang Serial Wire

Bước 3:

Bước 4:

Sau khi hoàn thành các bước trên ta tiến hành, chuyển sang tab Project Manager để cài đặt việc tạo code từ CubeMX

Bước 5:

Bước 6:

Bước 7:

Thực hiện test hàm prinf trên Serial

  2/ Sử dụng chế độ ngắt cho giao tiếp UART trong Keil C:

Bước 1-4: Tương tự như đã thực hiện khi sử dụng với hàm printf.

Tuy nhiên ở bước 3 chúng ta cần chuyển sang tab NVIC Settings và tick Enable Interrupt USART1

Bước 4: Hoàn tất cài đặt và sinh code

Bước 5:

Tạo 2 mảng trong file main.c:

Bước 6:

Sử dụng module USART1 ở chế độ Interrupt cần 2 hàm TX và RX:

Bước 7:

Thêm hàm Callback vào file main.c để gửi lên Serial sau khi nhận đủ 10 kí tự trong UART1 Interrupt.

Bước 11:

Thực hiện test chương trình

Mở file header stm32f1xx_hal_uart.h. Ở cuối file, bạn có thể thấy hàm serial với một số IO functions dưới đây.

TX/RX function của USART gồm:

Có 3 chế độ giao tiếp để truyền Serial: Polling, Interrupt, DMA.

Chúc các bạn thành công!

Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây.

Nhóm Tapit ARM R&D