Khuê Nguyễn Creator

Hot

Post Top Ad

Post Top Ad

Lập trình STM32 USB HID giả lập chuột máy tính

tháng 3 17, 2021 0

Các thiết bị USB HID rất gần gũi với chúng ta ví dụ như chuột máy tính, bàn phím, soud card… Vi điều khiển STM32 hỗ trợ giao thức HID Device giúp chúng ta có thể lập trình tạo ra các sản phẩm giống như những thiết bị đó. Bài hôm nay mình sẽ nói đến USB HID Custom, làm thế nào để nó có thể truyền nhận dữ liệu với máy tính, hãy cùng tìm hiểu nhé!

Bài 17 trong Serie Học lập trình STM32 từ A tới Z

USB HID là gì?

HID (viết tắt của Human Interface Device) là một tiêu chuẩn cho các thiết bị máy tính được vận hành bởi con người. Tiêu chuẩn này cho phép dễ dàng sử dụng các thiết bị này mà không cần bất kỳ phần mềm hoặc trình điều khiển bổ sung nào.

HID là một tiêu chuẩn được tạo ra nhằm đơn giản hóa quá trình cài đặt các thiết bị đầu vào thông qua từng giao thức cụ thể cho từng thiết bị như chuột, bàn phím,… Một thiết bị tuân thủ HID bao gồm “gói dữ liệu” có thể chứa tất cả các hành động của thiết bị.

Ví dụ: Bàn phím có thể có một phím để điều chỉnh âm lượng. Khi nhấn phím đó, “bộ mô tả HID” sẽ cho máy tính biết mục đích của hành động đó được lưu trữ trong các gói tin ở đâu và lệnh đó sẽ được thực thi.

Cách giao tiếp với tất cả các thiết bị USB HID

Trước tiên nếu bạn chưa bao giờ điều khiển một thiết bị USB thì hãy quay lại Bài 16 để đọc bài viết và  tài liệu USB in a Nutshell để có cái nhìn tổng quát nhất.

Thiết bị HID và Host (máy chủ) giao tiếp với nhau qua kiểu Control Transfer ( hay Endpoint 0). Sử dụng Ngắt tại chiều IN và tùy chọn ở chiều Out. Đặc tả của lớp HID cho phép chúng có thể truyền dữ liệu ở cả tốc dộ low speed , full speed và high speed.

Human Interface Device Class hoạt động như thế nào?

Trước khi máy chủ có thể nói chuyện với thiết bị, nó cần biết cách sử dụng hoặc ứng dụng của thiết bị này là gì? Dữ liệu của nó được tổ chức như thế nào? và Dữ liệu thực sự đo lường điều gì?

Lấy ví dụ: Nếu thiết bị của bạn là một con chuột máy tính, các nút bấm và tọa độ sẽ điều khiển Pointer trên màn hình. Sự kiện click hoặc righ click sẽ làm gì, scroll sẽ làm gì. Để tất cả các sự kiện đó được sảy ra, trình điều khiển lớp HID phải biết rõ:

  • Thiết bị HID kết nối sẽ điều khiển Pointer của máy tính
  • Có 3 nút trên thiết bị và khi nhấn tương ứng với các hàm của Pointer
  • Có 2 byte dữ liệu tọa độ sẽ thay đổi tọa độ của Pointer

Tất cả các thông tin này sẽ được mô tả trong phần Report Descriptor. Khi trình điều khiển phân tích cú pháp của Report Descriptor nó sẽ hiểu được khi thiết bị chuột máy tính truyền dữ liệu lên, dữ liệu nào sẽ thuộc ứng dụng nào của máy tính. (Tương tự bạn phân luồng dữ liệu UART vậy).

Khi một thiết bị HID được kết nối, Host sẽ tạo ra 1 Request đó là GET_DESCRIPTOR, sau khi hoàn tất quá trình. Chuột máy tính và máy tính sẽ giao tiếp với nhau mà ko cần thêm driver gì cả.

Cấu trúc của Report Descriptor

Bộ Report Descriptor được mô tả bởi chuỗi các mục, các mục này mô tả dữ liệu sẽ truyền đi khi thiết bị USB HID device truyền hoặc nhận. Mỗi mục bắt đầu bằng tiền tố là 1 Byte quy định vai trò của mục và độ dài dữ liệu của nó.

Mỗi mục chia làm 3 loại thẻ chính:

  • Main: Mô tả thực tế dữ liệu truyền đi và nơi dữ liệu được sử dụng. Các thẻ Global và Local có chức năng bổ nghĩa cho Main
  • Global: Mô tả thuộc tính của tất cả các thẻ Main phía sau nó, cho đến khi có 1 thẻ Gobal khác xuất hiện
  • Local: Thẻ này mô thả thuộc tính của thẻ Main phía sau nó.

Mỗi loại thẻ bao gồm một số loại chính như:

Với Main item:

  • Input: Mô tả dữ liệu truyền từ thiết bị lên host như sự kiện nhấn nút, dữ liệu cảm biến, dữ liệu của nhà phát hành muốn gửi
  • Output: Mô tả dữ liệu từ Host truyền về thiết bị như điều khiển led, động cơ ….
  • Feature: Mô tả  dữ liệu được truyền đi được sử đụng để cấu hình cài đặt thiết bị như, tăng giảm tốc độ nháy của led, tốc độ động cơ …
  • Collection và End Collection: Mỗi thiết bị HID phải có 1 bộ sưu tập ứng dụng ( Application Collection), để trình xử lý có thể biết được dữ liệu đang sử dụng trong ứng dụng nào. Ví dụ: 1 thiết bị có 3 tín năng chuột, bàn phím và nút nguồn thì phải có 3 Application Collection để phân biệt dữ liệu gửi đi và trả về.

Với Global Item:

  • Usage Page: Mô tả danh mục cao nhất của thiết bị như Generic Desktop Controls ( điều khiển thiết bị để bàn), Game control, điện thoại ….
  • Logical Minimum: Giá trị số nguyên nhỏ nhất của Main Item
  • Logical Maximum: Giá trị số nguyên lớn nhất của Maih Item
  • Report Size: Kích thước của Main Item (tính theo Bit)
  • Report Count: Số lượng Main Item

Với Local Item:

  • Usage: Mô tả nhỏ hơn về lớp Usage Page: Ví dụ: như Usage Page là Generic Desktop Controls thì Usage có thể là System Control hoặc Application control.

Mỗi thẻ mục sẽ được phân loại tương ứng với 1 mã từ 0 – 255 ( 1 Byte).

Cấu trúc của Report Descriptor như sau:

hid class struct

Lấy ví dụ về Report Descriptor cho chuột máy tính như sau:

HIDReportDescriptor

Phần khoanh đỏ cấu hình 3 nút nhấn của chuột, phần khoanh xanh cấu hình tọa độ của chuột.

Phần Usage Page và Usage xác định kiểu thiết bị đó là Mouse và thuộc máy tính để bàn (Generic Desktop).

Các bạn có thể tham khảo link này để phân tích 1 RD: https://www.crifan.com/files/doc/docbook/usb_hid/release/webhelp/hid_report_example_analysis.html

Các tool dùng trong lập trình STM32 USB HID

Phần mềm gửi và nhận dữ liệu HID Terminal:

Link download:HID Terminal

Tools giải mã report descriptor.

http://eleccelerator.com/usbdescreqparser/

Cách biến Kit Bluepill thành chuột máy tính với USB HID

Để sử dụng kit stm32f103c8t6 Bluepill thành chuột máy tính chúng ta cần phân tích dữ liệu truyền lên máy tính của 1 con chuột.

Cấu trúc dữ liệu truyền lên bao gồm:

  • 3 phím bấm: Right, Left, Scroll với 2 mức logic 0 và 1
  • 2 biến tọa độ X và Y với mức logic từ -127 đến 127

Chúng ta sẽ sử dụng Joystick đọc ADC 2 kênh X Y và nút nhấn trên nó sẽ tương ứng với phím Left Click.

joystick ps2

Mỗi khi có sử kiện nhấn nút hoặc di chuyển, chúng ta sẽ gửi dữ liệu theo gói thông qua USB HID.

Lập trình STM32 USB HID như 1 con chuột (Mouse) điều khiển con trỏ máy tính

Trong bài này mình sẽ sử dụng Joystick đọc giá trị ADC biểu thị trục X, Y. Và nút nhấn trên Joystick biểu thị cho Left_Button trên chuột máy tính.

Cấu hình STM32 USB HID trên Cube MX

Mở CubeMx, chọn chip STM32f103C8T6, trong System Core

USB HID
SYS chọn Debug Serial Wire: cho phép debug qua stlink

 

USB HID 2
RCC chọn HSE: Thạch anh ngoại
USB HID 3
GPIO chọn PA2 là nút nhấn Pull Up

 

Trong Tab Analog ta sẽ cấu hình ADC1 để đọc giá trị Joystick

USB HID 4
Chọn 2 kênh In1 và In2. Bật chế độ scan và cont. Nhớ chọn Num of Con là 2 và chỉnh các chanel về đúng 0 và 1
USB HID 5
Add thêm DMA từ ADC về Memory, chế độ Circular và Width là Half Word

Thiết lập USB

USB HID 6
Chọn Usb Device (FS), USB chế độ full speed
USB HID 7
Chọn HID trong Class của Middleware

Thiết lập Clock cho USB là 48Mhz (Bắt buộc)

USB HID 8

Đặt tên bài học rồi Gen code như tất cả các bài trước

USB HID 9

Lập trình STM32 USB HID trên Keil C

Open bằng Keil C. Đầu tiên chúng ta sẽ thêm thư viện Hid vào main để dễ dàng thao tác bằng lệnh #include “usbd_hid.h”

USB HID lap trinh 1

Sau đó extern biến chứa giá trị cài đặt của USB vào main

USB HID lap trinh 2

Tìm hiểu HID_MOUSE_ReportDesc

Khi chọn chế độ USB HID, CubeMX đã mặc định chọn thiết bị HID đó là chuột máy tính. Chúng ta cùng phân tích Report Desciptor mà CubeMx đã cho sẵn nhé. Các bạn vào USBD_HID.c và tìm dòng code như sau:

USB HID lap trinh 3

Copy đoạn dữ liệu và paste vào công cụ phân tích mình vừa mới nêu trên: http://eleccelerator.com/usbdescreqparser/

USB HID lap trinh 4

Kết quả phân tích sẽ như sau:

0x05, 0x01,        // Usage Page (Generic Desktop Ctrls)
0x09, 0x02,        // Usage (Mouse)
0xA1, 0x01,        // Collection (Application)
0x09, 0x01,        //   Usage (Pointer)
0xA1, 0x00,        //   Collection (Physical)
0x05, 0x09,        //     Usage Page (Button)
0x19, 0x01,        //     Usage Minimum (0x01)
0x29, 0x03,        //     Usage Maximum (0x03)
0x15, 0x00,        //     Logical Minimum (0)
0x25, 0x01,        //     Logical Maximum (1)
0x95, 0x03,        //     Report Count (3)
0x75, 0x01,        //     Report Size (1)
0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x95, 0x01,        //     Report Count (1)
0x75, 0x05,        //     Report Size (5)
0x81, 0x01,        //     Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)
0x09, 0x30,        //     Usage (X)
0x09, 0x31,        //     Usage (Y)
0x09, 0x38,        //     Usage (Wheel)
0x15, 0x81,        //     Logical Minimum (-127)
0x25, 0x7F,        //     Logical Maximum (127)
0x75, 0x08,        //     Report Size (8)
0x95, 0x03,        //     Report Count (3)
0x81, 0x06,        //     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0,              //   End Collection
0x09, 0x3C,        //   Usage (Motion Wakeup)
0x05, 0xFF,        //   Usage Page (Reserved 0xFF)
0x09, 0x01,        //   Usage (0x01)
0x15, 0x00,        //   Logical Minimum (0)
0x25, 0x01,        //   Logical Maximum (1)
0x75, 0x01,        //   Report Size (1)
0x95, 0x02,        //   Report Count (2)
0xB1, 0x22,        //   Feature (Data,Var,Abs,No Wrap,Linear,No Preferred State,No Null Position,Non-volatile)
0x75, 0x06,        //   Report Size (6)
0x95, 0x01,        //   Report Count (1)
0xB1, 0x01,        //   Feature (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0,              // End Collection

// 74 bytes

Ta thấy rằng trình tự các byte gửi như sau:

1 byte nút nhấn -> 3 byte X, Y, Whell -> 2byte Wakeup -> 1 byte kết thúc

Số byte này bạn chỉ cần đếm trong các đoạn Report Count theo thứ tự từ trên xuống dưới. Còn ý nghĩa của các từ mình đã giải thích bên trên rồi nhé.

Vậy nên chúng ta sẽ tạo 1 mảng chứa giá trị của các byte gửi lên với 1byte kết thúc là mặc định nên ko cần thêm vào. Mình tạo mảng mouse_report[5], và mảng lưu 2 giá trị ADC1 truyền qua DMA

USB HID lap trinh 6

Trước Main ta sẽ lập trình như sau

Tạo một hàm tên là map để chuyển đổi giá trị ADC từ 0 – 4096 thành -127,127

USB HID lap trinh 7 1

 

Tạo hàm đọc giá trị nút nhấn, thực hiện chuyển đổi và ghi vào mảng mouse_report

Trước While cho bắt đầu chuyển đổi ADC DMA, Trong While ta đọc giá trị của mouse và gửi qua cổng USB HID

USB HID lap trinh 8

Kết nối và chạy thử USB HID

Nhấn F7 để Build và F8 để nạp Code vào Kit.

Kết nối Joystick vào Kit theo hướng dẫn:

5V —> 3.3V

GND —> GND

VRX —-> PA0

VRY —-> PA1

SW —-> PA2

Cắm dây Micro USB vào mạch và cắm đầu còn lại vào máy tính. Mở Manager ra xem bạn sẽ thấy thêm 1 thiết bị Mouse

USB HID chay thu

Mở Paint Sử dụng Joystick điều khiển thử.

Ta thấy rằng chuột chạy quá nhanh, không thể kiếm xoát và khi không di chuyển chuột cũng vẫn tự chạy. Lý do đó là điểm cân bằng của Joystick không giống lý thuyết đó là giá trị 2048.

Và chuột chạy quá nhanh do mạch sẽ gủi các giá trị từ -127 đến 127 cực nhanh khi giữ Joystick, các tọa độ này khiến chuột di chuyển rất nhanh. Vậy làm ntn để hiệu chỉnh hai thứ đó

Tinh chỉnh code (Calibration)

Rút dây cắm HID từ chuột ra, chạy chế độ debug.

Trong debug ta add giá trị ADC_Val vào Watch 1 và nhấn chạy chương trình. Chúng ta thấy rằng: giá trị cân bằng khác nhau dẫn tới chuột luôn luôn di chuyển.

USB HID calib 1

Sửa lại trong hàm Get Action, như sau:

USB HID calib 2

Sửa -127, 127 thành -10 và 10 sẽ giúp chuột di chuyển chậm hơn.

Nạp và chạy thử kết quả

Kết

STM32 USB HID được sử dụng rất rộng rãi khi muốn giao tiếp với máy tính, điện thoại, game pad một cách đơn giản nhất. Về cơ bản tất cả các device sử dụng USB HID đều làm việc giống nhau, sự khác nhau của chúng là cấu trúc gói tin truyền và đích đến sẽ được định nghĩa hết trong Report Descriptor.

Nếu thấy bài viết này có ích hãy like và chia sẻ cho người khác, đừng quên vào nhóm Anh Em Nghiện Lập Trình để giao lưu nhé các bạn

Nguồn: Lập trình STM32 USB HID giả lập chuột máy tính
Tác giả: Khuê Nguyễn



from Khuê Nguyễn – Học Điên Tử Lập Trình https://ift.tt/3bSo3gA
Read More

Lập trình STM32 USB CDC truyền nhận dữ liệu qua cổng COM ảo

tháng 3 09, 2021 0

Giao thức USB nói chung và STM32 USB CDC nói riêng là một giao thức khá khó lập trình. Nhưng ST đã hộ trợ lập trình viên rất nhiều bằng cách tạo ra các gói source Midware USB hỗ trợ rất nhiều cho lập trình. Việc chúng ta cần là học cách sử dụng API của các midware đó.

Bài 16 trong Serie Học lập trình STM32 từ A tới Z

Giao thức usb là gì?

USB (Universal Serial Bus) là một chuẩn kết nối tuần tự đa dụng trong máy tính. Dùng để kết nối các ngoại vi với máy tính theo quy chuẩn Plug and Play ( Cắm và chạy), với tính năng cắm nóng thiết bị (không phải khởi động lại hệ thống) giúp việc kết nối trở nên đơn giản hơn rất nhiều.
Giao thức USB được phát hành vào năm 1996, hiện đang được duy trì bởi tô chức USB-IF. Theo wikipedia

Đã có bốn thế hệ USB, gồm: USB 1.xUSB 2.0USB 3.x và USB4

Giao thức USB rất thông dụng

Một số kiến thức cơ bản về giao thức usb

Kiến trúc hệ thống USB

Một hệ thống USB được mô tả bởi 3 định nghĩa:

  • USB Host: Chỉ có 1 Host duy nhất trong hệ thống ( thông thường sẽ là máy tính cá nhân hoặc máy tính nhúng). Chúng điều khiển mọi luồng dữ liệu và cách thức giao tiếp trong hệ thống.
  • USB Device: Trong một hệ thống có thể có nhiều device chúng có thể đóng nhiều vai trò như: Thiết bị đầu cuối tương tác với người dùng (HID), lớp giao tiếp (CDC), lưu trữ dữ liệu (MSP), Mở rộng cổng kết nối (HUB) …..
  • USB Connect: Được hiểu là kiểu kết nối để các thiết bị USB có thể giao tiếp được với Host.

Kiến trúc bus: Về mặt vật lý, kiến trúc Bus USB là một tầng sao, với Host là trung tâm. Mỗi tia là 1 kết nối giữa Host với Hub, Host với Device hoặc Device với Hub. Với 7bit địa chỉ, một Host có thể quản lý 127 thiết bị trong mạng lưới của nó.

kiến trúc của hệ thống USB
hệ thống USB

Cấu trúc điều khiển truyền nhận

Để tất cả các thiết bị trong cùng hệ thống hiểu nhau chúng phải tuân thủ theo quy tắc điều khiển truyền nhận (Control Transfer).

control transfer

Một gói Control Transfer được chia thành 3 Transaction:

  • Setup Transaction: Thiết lập
  • Data Transaction: Dữ liệu
  • Status Transaction: Trạng thái

Mỗi Transaction lại chia thành các gói tin:

  • Setup hoặc IN/OU: Gói thông báo, cho biết rằng các data phía sau dùng để làm gì, được xác định rõ bởi các Mã Token tương ứng với chức năng đó
  • DATA: Gói dữ liệu xác định dữ liệu truyền của transaction
  • ACK: Gói bắt tay, thông báo dữ liệu truyền thành công hay thất bại

Mỗi gói tin (Packet) lại bao gồm các trường riêng, trong đó có 3 loại trường (fields) bắt buộc trong mỗi gói tin đó là:

  • Synch: Trường đồng bộ, thông báo thời điểm bắt đầu gói
  • PID: Packet identifier Trường định danh gói tin. Cho biết gói tin này dùng làm gì, hướng dữ liệu của gói. Nếu là gói bắt tay, chúng sẽ cho biết đã truyền nhận thành công hay chưa
  • EOP: End of Packet Trường kết thúc, cho biết gói tin đã kết thúc
  • Còn lại các trường khác sẽ tùy thuộc vào kiểu gói tin truyền nhận là gì quyết định

Các kiểu truyền nhận trong USB

Chuẩn USB định nghĩa 4 kiểu transfer (cũng có thể gọi là 4 kiểu endpoints), chúng bao gồm:

  1. Control transfer
  2. Interrupt transfer
  3. Bulk transfer
  4. Isochronous transfer

Tài liệu về giao thức USB

Nói về USB thì cần rất nhiều tài liệu bạn mới có thể hiểu hết được, thế nhưng để hiểu mức cơ bản thì bạn có thể đọc cuốn USB in a Nutshell. Nó khá cô đọng và không quá dài như các tài liệu khác

Link: https://drive.google.com/open?id=1wEQKyJVl3d0I6MbVtHehQ1Ciqf878DOC

Hoặc tham khảo các tài liệu khác tại vidieukhien.org: http://vidieukhien.org/mot-so-tai-lieu-co-ban-ve-usb.html

Giao thức Usb cdc trên stm32

USB CDC là gì?

USB communications device class hay được hiểu là Lớp thiết bị giao tiếp thông qua USB. Nghe có vẻ hơi tối nghĩa nhưng bạn có thể hiểu rằng nó được sử dụng để các thiết bị giao tiếp với nhau chứ không tương tác với con người như HID class.

Các thiết bị thuộc lớp này cũng được triển khai trong các hệ thống nhúng như điện thoại di động để điện thoại có thể được sử dụng làm modem, fax hoặc cổng mạng. Các giao diện dữ liệu thường được sử dụng để thực hiện truyền dữ liệu hàng loạt.

STM32 USB CDC

Trong STM32f103c8t6 chỉ hỗ trợ giao thưc USB kiểu Device, thế nên ta sẽ sử dụng kit Bluepill như một thiết bị để truyền nhận dữ liệu giữa nó và máy tính. Cách thức giao tiếp đã được chuẩn hóa trong thư viện USB của CubeMx, vậy nên trong bài này chúng ta sẽ không xét tới những phần đó nữa, mà tập trung vào việc sử dụng dữ liệu truyền nhận được.

Lập trình stm32 usb cdc

Thiết lập STM32 Usb CDC trên Cube MX

Mở Cubemx lên, trong tab SYS chọn debug Serial Wire

STM32 USB CDC 1

Tab RCC chúng ta chọn nguồn dao động là thạch anh ngoại HSE.

STM32 USB CDC 2

 

Trong Conectivity chọn USB và tick và Device (FS). Giao thức USB Device Full Speed.

STM32 USB CDC 3

Phần Middleware chọn USB_DEVICE chọn Clas CDC hay cổng com ảo. Chỉnh sửa kích thước Buffer truyền và nhận. Ở đây mình sử dụng 64bytes.

STM32 USB CDC 4

Chuyển qua Tab Clock Config -> Chọn tần số cho bộ USB là 48Mhz (Bắt buộc), tần số của mạch có thể chọn cao hơn, ở đây mình chọn 48Mhz.

STM32 USB CDC 5

Đặt tên, chọn IDE sau đó Gen code.

STM32 USB CDC 6

Lập trình STM32 Usb CDC với Keil C

Mở Project vừa tạo, chọn File usbd_cdc_if.c. Code thêm vào phần CDC_Receive_FS như hình.

STM32 USB CDC 7

Giải thích code:

Khi có một gói tin truyền đến, MCU sẽ gọi hàm CDC_Recive_FS để đọc dữ liệu nhận được bằng lệnh USBD_CDC_RecivePacket(&hUsbDeviceFS);

Sau khi đọc xong gói tin, dữ liệu sẽ được lưu tại biến: UserRxBufferFS

Sau đó chúng ta thực hiện lệnh gửi dữ liệu với độ dài lấy từ hàm strlen((const char*)UserRxBufferFS) – 1. Tại sao lại – 1 vì khi nhận được 1 chuỗi bất kì, cuối gói tin nhận được sẽ có 1 byte kiểm tra đữ liệu, vậy nên nếu gửi tất cả sẽ thừa 1 byte.

Sau khi gửi xong, chúng ta xóa UserRxBufferFS; để chuẩn bị nhận giá trị tiếp theo.

Cài đặt Driver STM32 Usb CDC

Để sử dụng được Vitual Com Port chúng ta cần cài Driver để máy tính biết cần giao tiếp với cái gì. Cũng giống như khi bạn cài driver cho USB to COM sử dụng PL2303 hoặc CH340 vậy.

Nhấn vào link để down về: https://www.st.com/en/development-tools/stsw-stm32102.html

STM32 USB CDC 8

Download bản phù hợp với máy tính của bạn, rồi cài đặt, sau khi cài xong, nhấn vào manager xem đã ok chưa. Hiển thị giống hình là đã cài đúng

STM32 USB CDC 9

Gửi dữ liệu lên STM32 USB CDC với Hercules Terminal

Sau khi đã cài đặt xong, chúng ta mở phần mềm Hercules Terminal, chọn cổng COM tương ứng. Nếu bạn chưa có phần mềm có thể tham khảo bài viết: Hướng dẫn sử dụng Hercules Terminal

STM32 USB CDC 10

Gửi dữ liệu bất kì lên, mạch sẽ phản hồi lại đúng dữ liệu đó.

Kết

STM32 USB CDC được sử dụng rất nhiều trong việc truyền nhận giữa các thiết bị nhúng với nhau hoặc giữa chúng với máy tính, vì tính tiện dụng và hiệu quả và tốc độ nó mang lại.

Nếu bạn thấy bài viết này có ích hãy chia sẻ với bạn bè mình và cùng vào nhóm những Anh Em Nghiện Lập trình nhé !!!

Nguồn: Lập trình STM32 USB CDC truyền nhận dữ liệu qua cổng COM ảo
Tác giả: Khuê Nguyễn



from Khuê Nguyễn – Học Điên Tử Lập Trình https://ift.tt/3rwvQG1
Read More

Bài 8 Xuất file PCB cần những gì?

tháng 5 02, 2020 0
Bài 8 Xuất bản PCB cần những file gì? Trong bài này mình sẽ hướng dẫn các bạn cách xuất bản PCB - Xuất file Gerber, Drill holes, cho nhà sản xuất mạch in - Xuất file Bill of material (Bom List) để mua linh kiện và hàn linh kiện -Xuất file nguyên lý (Schematic) để thuận tiện cho quá trình chỉnh sửa các bản sau - Xuất file 3D PDF để gửi cho khách hàng - Xuất file PDF để làm mạch in tại nhà



Read More

Bài 7 Sửa lỗi PCB và chỉnh sửa trước khi xuất bản

tháng 5 02, 2020 0
Link download Tool Tạo Logo: https://drive.google.com/open?id=143O... Bài này mình sẽ hướng dẫn các bạn sử dụng công cụ tìm lỗi và chỉnh sửa mạch in của mình. Sau đó chỉnh thêm một số thuộc tính khác làm cho mạch in chuyên nghiệp hơn. Và mình vừa mở một Blog mới, trong Blog sẽ tổng hợp tất cả các bài giảng và phím tắt mình sử dụng. Ghé qua để xem nhé



Read More

Bài 6 Vẽ mạch in trên PCB cách đi dây (Rounting)

tháng 5 02, 2020 0
Tiếp tục series vẽ mạch in trên Altium, bài này mình sẽ giới thiệu với các bạn cách đi dây trong PCB.
- Cách đặt luật đi dây (Rule)
- Các công cụ đi dây, routing và unrount
- Cách bắn Via cơ bản
- Chỉnh các layer

►Blog của mình: https://doankhue.com

Nhớ like và đăng kí kênh để nhận những video khác nhé
ĐĂNG KÝ (SUBSCRIBE) ĐỂ THEO DÕI CÁC VIDEO CHIA SẺ TIẾP THEO: https://bit.ly/2Ekw26C



Read More

Bài 5 Sắp xếp linh kiện trong PCB trên Altium

tháng 5 02, 2020 0
Tiếp tục series học thiết kế mạch in trên Altium,, hôm nay mình sẽ hướng dẫn các bạn cách sắp xếp linh kiện trong PCB sao cho hợp lý, cách sắp xếp theo khối và chuyển layer cho mỗi linh kiện.

►Blog của mình: https://doankhue.com

Nhớ like và đăng kí kênh để nhận những video khác nhé
ĐĂNG KÝ (SUBSCRIBE) ĐỂ THEO DÕI CÁC VIDEO CHIA SẺ TIẾP THEO: https://bit.ly/2Ekw26C


Read More

Post Top Ad