STM32 USB VCP (виртуальный COM-порт)

Вопрос: Я сгенерировал код для "stm32f103c8t6" с CubeMX для USB VCP, когда я добавляю команду "CDC_Transmit_FS" для отправки данных, порт не распознается windows10! что мне делать? Вот код, который скомпилирован без ошибок: #include "stm32f1xx_hal.h" #include "usb_device.h" #include "usbd_cdc_if.h" int main(void) { uint8_t Text[] = "Hellorn"; while (1) { CDC_Transmit_FS(Text,6); /*when commented the port is recognized*/

Вопрос:

Я сгенерировал код для “stm32f103c8t6” с CubeMX для USB VCP, когда я добавляю команду “CDC_Transmit_FS” для отправки данных, порт не распознается windows10! что мне делать? Вот код, который скомпилирован без ошибок:

#include «stm32f1xx_hal.h» #include «usb_device.h» #include «usbd_cdc_if.h» int main(void) { uint8_t Text[] = «Hellorn»; while (1) { CDC_Transmit_FS(Text,6); /*when commented the port is recognized*/ HAL_Delay(1000); } } Лучший ответ:

Положите задержку перед CDC_Transmit_FS – он будет ждать инициализации. Ваш код должен быть таким

int main(void) { uint8_t Text[] = «Hellorn»; HAL_Delay(1000); while (1) { CDC_Transmit_FS(Text,6); /*when commented the port is recognized*/ HAL_Delay(1000); } } Ответ №1

Есть три вещи, которые вам нужно проверить в моем опыте:

  1. startup_stm32f405xx.s → Увеличить размер кучи. Я использую размер кучи 800 и размер стека 800.
  2. usbd_cdc_if.c → APP_RX_DATA_SIZE 64 и APP_TX_DATA_SIZE 64
  3. usbd_cdc_if.c → добавить код ниже в функцию CDC_Control_FS()

Код:

case CDC_SET_LINE_CODING: tempbuf[0]=pbuf[0]; tempbuf[1]=pbuf[1]; tempbuf[2]=pbuf[2]; tempbuf[3]=pbuf[3]; tempbuf[4]=pbuf[4]; tempbuf[5]=pbuf[5]; tempbuf[6]=pbuf[6]; break; case CDC_GET_LINE_CODING: pbuf[0]=tempbuf[0]; pbuf[1]=tempbuf[1]; pbuf[2]=tempbuf[2]; pbuf[3]=tempbuf[3]; pbuf[4]=tempbuf[4]; pbuf[5]=tempbuf[5]; pbuf[6]=tempbuf[6]; break;

и определите uint8_t tempbuf[7]; в разделе private_variables пользователя.

Без увеличения размера кучи Windows вообще не реагирует. Без точки 3 Windows отправит информацию о скорости передачи в бодах, а затем прочитает скорость передачи в бодах, ожидая возврата тех же значений. Поскольку вы не возвращаете никаких значений, виртуальный COM-порт остается не загруженным драйвером.

Если вы все это сделаете, можно использовать драйвер VCP для Windows 10 из коробки. Не нужно устанавливать очень старый драйвер ST VCP в вашей системе.

PS: Я где-то читал, что VSEND тоже создает проблемы. Не знаю, я не настроил его, и все работает как шарм.

Ответ №2

вам может потребоваться установить драйвер, чтобы получить распознанное устройство как COM-порт, вы можете получить его с сайта st, если не установлено устройство указано с вопросом или восклицательным знаком в диспетчере устройств

обратите внимание, что вы не можете отправить, пока устройство не подключится к хосту! не уверен, что CubeMX CDC_Transmit_FS проверяет это, а вместо задержки для повторной отправки вы должны проверить данные класса CDC. “TXSstate” имеет значение 0, среднее значение tx завершено.

Оцените статью
Добавить комментарий