HID (Human Interface Device) и VCP (Virtual COM Port)

Разберём отличия HID от VCP:

ХарактеристикаHIDVCP (CDC)
ДрайверыНе требуются (поддержка на уровне ОС)Требуют драйвер (ST VCP для Windows)
СкоростьДо 64 КБ/с (прерывания)До 1 МБ/с (bulk transfer)
Размер пакетаДо 64 байтДо 512 байт и более
ЗадержкаВыше (из-за polling)Ниже
Сложность настройкиПрощеСложнее (нужна конфигурация CDC)
ИспользованиеКлавиатуры, мыши, джойстикиCOM-порт, терминал, данные

HID (Human Interface Device) — это универсальный протокол общения между человеком и компьютером через специализированные интерфейсы.

VCP (CDC) — это виртуальный COM-порт, который требует отдельного терминального ПО.

CDC-интерфейс (Communication Device Class, «класс коммуникационного устройства») — это интерфейс, который позволяет устройствам взаимодействовать через универсальную последовательную шину (USB).

В Ардуино использует USB-UART преобразователь. На стороне микроконтроллера для связи используется UART, а на стороне компьютера — виртуальный COM-порт.

Как настроить VCP на STM32 для вывода текста:

Шаг 1: Включите USB CDC в CubeMX

  • В Connectivity → USB выберите Device (FS).
  • В Middleware → USB_DEVICE → Communication Device Class (CDC).
  • Сгенерируйте код.

Шаг 2: Добавьте код для отправки текста

#include "usbd_cdc.h"

void USB_Send_Message(char *msg) {
  CDC_Transmit_FS((uint8_t*)msg, strlen(msg));
  HAL_Delay(10);  // Задержка для стабильности
}

// Пример в main():
int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_USB_DEVICE_Init();

  while (1) {
    USB_Send_Message("Hello from STM32!\r\n");
    HAL_Delay(1000);
  }
}

Шаг 3: Подключитесь к терминалу

  • Подключите плату по USB.
  • Проверяем, подключился ли COM-порт «ttyACM0» командой
ls /dev/tty*

Либо следующей командой:

dmesg | grep -i "usb\|tty"

Вариант коммуникации с использованием cat / echo:

Чтение:

cat /dev/ttyACM0

Чтение с логированием в файл:

sudo cat /dev/ttyACM0 | tee output.log

Запись (если нужно отправить команду):

echo "command" > /dev/ttyACM0

Вариант коммуникации с использованием screen:

Откройте screen, введите «screen /dev/ttyACM0 115200»

(при неисправностях убедитесь, что скорость (115200, 9600 и др.) совпадает в коде STM32 и терминале.)

Для выхода: Ctrl+A, затем K, подтвердить y.

Текст будет выводиться в реальном времени.

Можно также использовать утилиты minicom, picocom и gtkterm (графический терминал).

А можно вообще просматривать информацию через консоль Cube IDE: