Разберём отличия HID от VCP:
| Характеристика | HID | VCP (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:

