Tính năng USB HID trên STM32F103C8T6 (bàn phím)

Ở bài viết trước các bạn đã được hướng dẫn cách sử dụng kit STM32F103C8T6 như chuột máy tính, trong bài viết này các kiến thức về USB HID sẽ được đi sâu hơn và tính năng USB HID được áp dụng để giả lập SM32F103 thành bàn phím (keyboard).

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

CubeMX generated files

Cài đặt USB HID Keyboard cũng giống với cài đặt cho tính năng USB HID Mouse nên bạn có thể tham khảo ở đây.

Trong thư mục USB device library/Middlewares:

– File usbd_core.c cung cấp tất cả chức năng cốt lõi của thiết bị USB

– Các file usbd_ioreq.c, usbd_ctlreq.c cung cấp các request từ USB IO

– File usbd_hid.c cung cấp các thông tin để tương tác với USB host

Bình thường khi bạn tạo file từ CubeMX thì mặc định các thông số trong file usbd_hid.c là của Mouse USB nên nếu bạn muốn chuyển đổi USB HID Mouse thành USB HID Keyboard thì phải thay đổi các descriptions (mô tả) trong file usbd_hid.c. Cụ thể như sau:

– Ở thư mục Middlewares -> kích đúp chuột vào usbd_hid.c

– Tìm đến mảng USBD_HID_CfgDesc rồi thay đổi các mô tả:

  • bInterfaceSubClass: đổi 0x01 thành 0x00 (no boot)
  • nInterfaceProtocol: đổi 0x02 thành 0x01 (keyboard)

– Sau đó tìm đến mảng HID_MOUSE_ReportDesc, xóa các thông số có sẵn và thay thế bằng các dòng sau:

– Vào Middlewares\ST\STM32_USB_Device_Library\Class\HID\Inc\ usbd_hid.h thay đổi giá trị của các biến

– Ở file main.c:

Mở file usb_device.c và tìm đến USBD_HandleTypeDef hUsbDeviceFS, copy và extern dòng đó vào file main.c

Khai báo mảng press_report để gửi report đến máy tính:

Trong hàm sendData(), nếu bạn nhấn nút PA0 thì trên màn hình máy tính sẽ hiện dòng chữ “abc”

Ở vòng while(1), gọi lại hàm sendData()

– Link video demo:

Mở rộng

– Dưới đây là mô tả USB HID report cho một thiết bị USB tiêu chuẩn:

– Nếu có nhiều thiết bị USB cùng kết nối thì bạn phải thêm dòng REPORT_ID cho mỗi thiết bị.

Tham khảo

  1. Tổng hợp các kiến thức về USB HID Report Descriptors các bạn xem ở đây: https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors
  2. Keyboard scan codes

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.

Ngoc Hang