Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/48: Рейтинг темы: голосов - 48, средняя оценка - 4.83
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
1

У STM32H743ZI не работает корректно CDC Virtual COM port через USB FullSpeed

26.06.2019, 22:26. Показов 9372. Ответов 3

Author24 — интернет-сервис помощи студентам
Борюсь с виртуальным COM портом через USB FS, есть две платы моя собственная и Nucleo. На форуме ST создать тему мне не позволяют, а на сообщение в старой теме ни кто не ответил.

Использую CubeMX 5.2.1 и Firmware FW 1.4.0. Windows 10 определяет COM port, но вот общаться через него нормальным способом не удается. В терминальных программах PuTTY, Real term выдается сообщение, что не верные параметры порта, такое же исключение выбрасывает C# и Qt при попытке открыть порт ("The parameter is incorrect"). Параметры пробовал разные и самые простые из настроек драйвера по умолчанию 8 бит, 9600, без четности, 1 стоп, без flowcontrol (в Linux все работает при любых параметрах, что в Qt, что в терминальных программах). Пробовал использовать драйвер Windows по умолчанию и устанавливать с сайта ST для Windows 7 - поведение одинаковое.

В Windows 10 удается однако тоже общаться через COM порт с помощью программы TeraTerm или пользуясь Си функциями: fopen("COM6", "r+"), fwrite, fread, fclose - т.е. без всяких параметров работы порта. Но хотелось бы, чтобы порт мог работать нормально со всеми программами.

Такое впечатление, что драйверу COM порта не удается записать параметры в USB устройство и он поэтому не хочет с ним работать, Linux видимо такие проверки записываемых параметров не делает.

Пробовал использовать более старые версии CubeMX 4.27.0 и FW 1.3.2 там дела еще хуже - компьютер не видит USB устройство. Точнее, если загрузить и запустить быстро прошивку после более новой, новый COM порт с другим номером появляется и даже работает через PuTTY, но стоит включить/выключить питание COM порт не появляется, так же если просто начисто загрузить прошивку, т.е. FW 1.3.2 не устанавливает соединение (VBUS sense включено, но не работает)

Добавлено через 21 минуту
Размер кучи увеличиваю до 0x400

В файле usbd_desc.c исправляю ошибку

Программа UsbView:

===>Device Descriptor<===
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0x02 -> This is a Communication Device
bDeviceSubClass: 0x02
*!*ERROR: bDeviceSubClass of 2 is invalid
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40 = (64) Bytes
idVendor: 0x0483 = STMicroelectronics
idProduct: 0x5740
bcdDevice: 0x0200
iManufacturer: 0x01
English (United States) "STMicroelectronics"
iProduct: 0x02
English (United States) "STM32 Virtual ComPort"
iSerialNumber: 0x03
English (United States) "383A34463137"
bNumConfigurations: 0x01


на bDeviceSubClass 0x00
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2019, 22:26
Ответы с готовыми решениями:

F3 Discovery USB CDC(Virtual Com Port) - дело в железе?
Здравствуйте. Столкнулся с проблемой - не могу запустить виртуальный ком порт на данной...

Организация связи по ethernet, по аналогии с USB CDC Virtual com port
Удалось организовать обмен данными между ПК и stm32 посредством создания виртуального...

ПК не определяет stm32f3discovery ни как Custom HID, ни как CDC Virtual com port
Здравствуйте! При попытке настроить stm32f3discovery в режиме Custom HID или CDC Virtual com...

Описание протокола USB CDC Abstract Control Model (Virtual ComPort)
Есть устройство, которое работает на винде. Это устройство определяется как виртуальный компорт....

STM32F4 USB Virtual Com Port
Добрый день. Имеется карта STM32F429I-Dyscovery соответственно с камнем STM32F429. Проект настроен...

3
75 / 75 / 8
Регистрация: 24.09.2015
Сообщений: 342
27.06.2019, 10:49  [ТС] 2
Для варианта CubeMX 4.27, FW 1.3.2 есть способ оживить USB добавив в функцию инициализации вызов функции
C++
1
HAL_PWREx_EnableUSBVoltageDetector();
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MX_USB_DEVICE_Init(void)
{
  /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
  
  /* USER CODE END USB_DEVICE_Init_PreTreatment */
  
  /* Init Device Library, add supported class and start the library. */
  USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
 
  USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC);
 
  USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS);
 
  USBD_Start(&hUsbDeviceFS);
 
  /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
  HAL_PWREx_EnableUSBVoltageDetector();
  
  /* USER CODE END USB_DEVICE_Init_PostTreatment */
}
- но при этом, если при включение питания USB кабель подключен, то микроконтроллер зависает, так что для повторного программирования надо будет отключить USB кабель. Если же подключить USB кабель через некоторое время после старта микроконтроллера, то все работает.

Добавлено через 1 час 24 минуты
Пустой проект CubeMX 5.2.1 + FW1.3.2 с виртуальным COM портом работает корректно, но при добавление шины FMC (Mux PSRAM) виртуальный COM порт перестает записывать параметры.

Если закоментировать инициализацию FMC, то виртуальный COM порт опять работает полноценно.

C
1
2
  MX_USB_DEVICE_Init();
//  MX_FMC_Init();
Замена порядка инициализации не помогает. Убирание разрешение на запись в FMC в CubeMX тоже не влияет.

В варианте CubeMX 5.2.1 + FW1.4.0 запись параметров виртуального COM порта не работает не зависимо, есть FMC или нет.
0
0 / 0 / 0
Регистрация: 01.05.2021
Сообщений: 1
01.05.2021, 21:18 3
Здравствуйте.

Я недавно перешел с F4 на H743 Nucleo.

Своими силами пытался написать код под Н7 нуклео, чтобы по виртуальному компорту на комп отсылать данные
и никак не могу - в диспетчере устройств только один компорт видит, ходя должно быть два.

Вы могли бы сбросить свой код, который реализует виртуальный ком порт?
Заранее спасибо.
0
210 / 163 / 36
Регистрация: 15.11.2012
Сообщений: 788
02.05.2021, 21:57 4
Цитата Сообщение от andre2120 Посмотреть сообщение
чтобы по виртуальному компорту на комп отсылать данные
У меня с этой Nucleo H743 другая история - виртуальный COM-порт (который совмещен с ST-Link) виден, но данные не передаются. А осциллограф (на ноге RX контроллера этого USART) показывает, что данные с USB-COM на самом деле идут, но это НЕ ТЕ данные. Более того, они разные при отправке одного и того же символа много раз подряд.
Причем в самый первый раз (в первое включение) у меня это все работало. Потом перестало.
0
02.05.2021, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2021, 21:57
Помогаю со студенческими работами здесь

Виснет USB Virtual COM Port STM32
Уже второй день мучаюсь, практически все перепробовал. Работает таймер - все отлично, работает USB...

USB Virtual COM Port. Получение строки из терминала
Добрый день! Изучаю USB Virtual COM Port и хочу передать на контроллер сроку символов. В уроке...

Есть ли у кого библиотека USB Virtual Port?
Нужно организовать подключение stm32f4 к компу.. в чипе есть usb не видел ли кто простую...

Обмен данными с несколькими USB CDC устройствами, подключёнными через USB HUB с внешним питанием
Добрый день уважаемые форумчане, форумчанки, форумчата и форумчатки. Столкнулся с такой проблемой,...

STM32F103 CubeMX USB composite CDC + CDC (2xCDC)
Добрый день! Задача сделать на STM32F103 два виртуальных СОМ-порта. Сгенерировал проект через...

Быстрый обмен информации через virtual com port
Подскажите, какими способами можно быстро принимать и обрабатывать данные с виртуального ком порта....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru