Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STMicroelectronics Virtual COM Port
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ViKo
Попробовал на двух платах Discovery (STM32F407, STM32F429) создать CDC устройство в STM32CubeMX. И оба раза компьютер обнаруживает устройство, устанавливает драйвер, но не может его запустить. И в настройках USB в Cube менял, и все равно. ОС - Windows 7 x64. Что не так? Полный интернет подобных сообщений, но ни одного ответа я не нашел.
И кабель менял, и в другую щель засовывал. rolleyes.gif
derun
Цитата(ViKo @ May 13 2014, 08:26) *
Попробовал на двух платах Discovery (STM32F407, STM32F429) создать CDC устройство в STM32CubeMX. И оба раза компьютер обнаруживает устройство, устанавливает драйвер, но не может его запустить. И в настройках USB в Cube менял, и все равно. ОС - Windows 7 x64. Что не так? Полный интернет подобных сообщений, но ни одного ответа я не нашел.
И кабель менял, и в другую щель засовывал. rolleyes.gif

Непонятна фраза "Не Запускается driver" -это как, какие сообщения выдает Винда?
У меня тоже Виндовс 7 x64 и все работает. Подробнее проблему опишите пожалуйста. Файл конфигурации Куба (*.ioc) приложите если можно.
uriy
C 32 битнымми windows плата работает?
Если да отключите проверку подписи драйвера в 64 битной windows.
derun
Цитата(uriy @ May 13 2014, 11:29) *
C 32 битнымми windows плата работает?
Если да отключите проверку подписи драйвера в 64 битной windows.

Думаю Вы правы, причина может быть именно в этом, хотя у меня заработало и без отключения цифровой подписи драйвера.
Может какая-то старая версия драйвера.
ViKo
Цитата(derun @ May 13 2014, 12:18) *
Непонятна фраза "Не Запускается driver" -это как, какие сообщения выдает Винда?
У меня тоже Виндовс 7 x64 и все работает. Подробнее проблему опишите пожалуйста. Файл конфигурации Куба (*.ioc) приложите если можно.

Вот так и пишет, как в подзаголовке показал, скопировал: "Запуск этого устройства невозможен. (Код 10)"
Зашиваю прошивку, втыкаю USB разъем, нажимаю сброс, Windows 7 находит устройство, автоматически находит драйвер для него (и вручную ставил - тот же, с сайта ST), устанавливает. После в Диспетчере устройств появляется COM3, но "запуск..." (см. выше).
Конфигурация в Cube - простая, выбираю Discovery плату, в ней включаю USB выводы, в USB включаю CDC. Своего не пишу ничего.
И так на двух разных платах.
Вот есть ссылка с подобной проблемой.
https://my.st.com/public/STe2ecommunities/m...rentviews=13131

Цитата(uriy @ May 13 2014, 12:29) *
C 32 битнымми windows плата работает?
Если да отключите проверку подписи драйвера в 64 битной windows.

С x86 не работал, не имею. biggrin.gif
Версия драйвера - последняя, что есть, 1.3.1
С этим возился дома, сейчас ничего больше сказать не могу.
KnightIgor
Цитата(ViKo @ May 13 2014, 11:01) *
Вот есть ссылка с подобной проблемой.
https://my.st.com/public/STe2ecommunities/m...rentviews=13131

Ну так там по ссылке написал один, что решил все проблемы, изменив размер буфера на 64. Думаю, где-то в настройках для CDC Endpoint. Другой пишет, что проблема ушла после установки CDC_IN_FRAME_INTERVAL в 0 в файле usbd_conf.h.
Я не пробовал еще эти Cube, но у нас на F103 на собственных платах CDC работают. Более того, мой коллега, гуру в Windows, написал свой собственный *.INF файл для установки CDC. Ведь по сути для CDC не нужен никакой сторонний драйвер. Просто Windows до XP включительно для каждого нового воткнутого CDC устройства проводит якобы установку драйвера, которая заключается просто в копировании родного файла usbser.sys из одного угла системы в другой, напрягая пользователя дурными вопросами. Более новые Win'ды это делают молча. Поэтому, если Windows не хочет общаться с CDC, надо покрутить дескриптор на предмет тех самых размеров буфера и временнЫх параметров.
derun
Цитата(ViKo @ May 13 2014, 12:01) *
Вот так и пишет, как в подзаголовке показал, скопировал: "Запуск этого устройства невозможен. (Код 10)"
Зашиваю прошивку, втыкаю USB разъем, нажимаю сброс, Windows 7 находит устройство, автоматически находит драйвер для него (и вручную ставил - тот же, с сайта ST), устанавливает. После в Диспетчере устройств появляется COM3, но "запуск..." (см. выше).
Конфигурация в Cube - простая, выбираю Discovery плату, в ней включаю USB выводы, в USB включаю CDC. Своего не пишу ничего.
И так на двух разных платах.
Вот есть ссылка с подобной проблемой.
https://my.st.com/public/STe2ecommunities/m...rentviews=13131


С x86 не работал, не имею. biggrin.gif
Версия драйвера - последняя, что есть, 1.3.1
С этим возился дома, сейчас ничего больше сказать не могу.

На форуме ST была рекомендация заменить строку:
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
в файле usbd_cdc.c
на :
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
ViKo
Цитата(derun @ May 15 2014, 14:18) *
На форуме ST была рекомендация заменить строку:
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
в файле usbd_cdc.c
на :
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));

Не помогло. Результат тот же.

Параллельно для STM32F3Discovery сотворил из библиотеки STM32_USB-FS-Device_Lib_V4.0.0 VirtualComport_Loopback, он работает. "Устройство работает нормально." Общаюсь с платой через HTerm. Правда, она другим кабелем подключена к компьютеру (на этой плате разъем другой). Код там другой, конечно, но, делаю вывод, что с компьютером и драйвером все нормально.

Для STM32F30x в CubeMX пока кодогенератора нет.
aaarrr
Цитата(ViKo @ May 15 2014, 23:24) *
Не помогло. Результат тот же.

Попробуйте подключить устройство и затем удалить его в диспетчере.
A. Fig Lee
Я бы посмотрел что на USB творится. "Device Monitoring Studio" то ли 30 то ли 40 баксов всего, да и трайал наверное есть.
ViKo
https://my.st.com/public/STe2ecommunities/m...urrentviews=328
Почитав эту тему, изменил размер кучи до 0x0400, и COM Port заработал. Буду пытаться разбираться дальше...
Golikov A.
я вот смотрел на это
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));

и вот мне подумалось, что тот кто код отлаживал сначала заметил что получил неверный указатель. Потом изменил это и кучу, и все заработало, сделал выводы что надо так сделать.

А мне кажется что надо поглядеть что возвращает USBD_malloc, наверняка в начальном варианте с маленькой кучей оно возвращало 0, как код ошибки что не удалось выделить буфер...
ViKo
Я там еще других настроек в CubeMX покрутил, в частности, задал скорость ножек USB High...
В-общем, пока ответ не готов.
uriy
Цитата
Я бы посмотрел что на USB творится. "Device Monitoring Studio" то ли 30 то ли 40 баксов всего, да и трайал наверное есть.
Есть и бесплатная версия http://freeusbanalyzer.com/
ViKo
За ссылки-советы - спасибо!
Я пользовался USBlyzer, USBTrace, но не в этом случае.
Atlantis-
У меня та же проблема, как и у автора темы. Никогда не имел дело с выделением памяти, подскажите это фишка RTOS или нет? и вообще что делает функция USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); куда она выделяет память, как и для чего? каковы последствия увеличения или уменьшения Heap_Size.
sadat
Функция выдает указатель на первый адрес созданной "последовательной кучке байт памяти" для буфера приема-передачи вроде. Проблема бывает из-за нехватки этой "кучки", либо неправильного описания типа (байт или слово).
Советую использовать примеры из комплекта "CUBE EXAMPLE" и подпиливать их для себя (либо выдрать участки кода), чем генерировать голый проект Куба. Либо сравнивать отличия.
Atlantis-
Цитата(sadat @ Oct 15 2014, 18:46) *
Советую использовать примеры из комплекта "CUBE EXAMPLE" и подпиливать их для себя (либо выдрать участки кода), чем генерировать голый проект Куба. Либо сравнивать отличия.

Вы имеете ввиду вот это? http://www.st.com/web/en/catalog/tools/PF259243#
я там примера USB CDC не нашел. скачал сейчас библиотеку, нашел отличие в файлах usbd_cdc.c , хотя у меня уже была та же версия библиотеки 1.3.0 и даже версия файла та же. неужели Cube что то нужное режет в файлах
sadat
Да, это самое.
Ну как-так не нашли...
Вот путь: STM_CUBE\STM32Cube_FW_F4_V1.3.0\Projects\STM324xG_EVAL\Applications\USB_Device\CDC_Standalone
CUBE не режет, он просто генерирует комментарий "здесь программист должен написать свой код обработки" ;-)
Atlantis-
Цитата(sadat @ Oct 16 2014, 16:47) *
Да, это самое.
Ну как-так не нашли...
Вот путь: STM_CUBE\STM32Cube_FW_F4_V1.3.0\Projects\STM324xG_EVAL\Applications\USB_Device\CDC_Standalone
CUBE не режет, он просто генерирует комментарий "здесь программист должен написать свой код обработки" ;-)

я смотрел в папках для плат Discovery. спасибо большое! но работа с запросами все равно осталась непонятной...
Виталий56
У меня было такое. На Х64 не заработало. ПОСТАВИЛ х32, убил виндовый драйвер и поставил от ST. После этого всё заработало.
diwil
Победил изменением размера кучи до 400. (win7 x64)

Вопрос - uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
я так понимаю, что чтобы передать данные нужно в UserTxBufferFS запихнуть данные из Buf?
А правильно ли я понимаю, что чтобы прочитать с помощью CDC_Receive_FS (uint8_t* Buf, uint32_t *Len), то нужно перекачать данные из UserRxBufferFS в buf?

Мож кто примером поделится.
ViKo
Возвращаюсь к теме (нашел поиском по USB Cube, уже и забыл, что своё). Сгенерил Кубом для STM32F3Discovery CDC. И, как видел в разных видео, пытаюсь использовать CDC_Transmit_FS, CDC_Receive_FS. Эти функции находятся в usbd_cdc_if.c. И они не видны из main.c.
И буфера уже есть там же:
/* It's up to user to redefine and/or remove those define */
/* Received Data over USB are stored in this buffer */
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
/* Send Data over USB CDC are stored in this buffer */
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
и тоже не видны из main.c
Как же ими пользоваться? Если внутри usbd_cdc_if.c, то как будто через задний проход пролез.

P.S. Еще один дурной вопрос. Установил Куб, запустил, из него установил библиотеки. Где примеры?? Или надо, все же скачать STM32CubeF3 и установить? Что же так мутно всё?
Atlantis-
Цитата(ViKo @ May 11 2015, 15:07) *
P.S. Еще один дурной вопрос. Установил Куб, запустил, из него установил библиотеки. Где примеры?? Или надо, все же скачать STM32CubeF3 и установить? Что же так мутно всё?

у меня тут C:\Users\имя пользователя\STM32Cube\Repository\STM32Cube_FW_F4_V1.5.0\Projects

Цитата(ViKo @ May 11 2015, 15:07) *
Если внутри usbd_cdc_if.c, то как будто через задний проход пролез.

по моему так и есть
ViKo
Цитата(Atlantis- @ May 12 2015, 16:24) *
у меня тут C:\Users\имя пользователя\STM32Cube\Repository\STM32Cube_FW_F4_V1.5.0\Projects

О, спасибо! Нашел и у себя. У меня сам Куб стоит на H:\Design. Никогда бы не догадался.
Разбираю пример CDC от Куба. Пока складывается впечатление, что писало несколько (много) разных людей. Не один раз порты, прерывания инициализируют... Главное, нет конкретного указания в документации, какие функции использовать. w00t.gif

Одно доброе дело сделал. Проверяю, что USB инициализировалась перед использованием. В Main. Теперь USB устройство определяется стабильно.
while (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) { }
ViKo
Мелкое замечание, не стоящее отдельной темы. Разве что, если бы была тема "STM32 в Кубе".
При установке в STM32CubeMX частоты MAIN_PLL для STM32F207, коэффициент умножения N невозможно выбрать меньше 192. Для этого частоту HSE придется делить до 1 MHz. А в руководстве на STM32F2xx сказано, что при 2 MHz джиттер меньше (при этом коэффициент N нужно бы взять, например, 120). А диапазон PLLN 192 - 432 показан просто конкретно для случая 1 MHz на входе PLL. А Кубописатели схалтурили, ограничились только этим.
bureau
Может кто-то сталкивался...
Win10 64x, CubeMX, STM32F407 discovery

Проект генерится из куба, винда драйвера ставит и определят COM порт вроде как без ошибок. Но вот когда пытаюсь подключится терминальной программой, то получаю
Error in OpenPort: Internal Error when initializing COM3
И то, были моменты когда открытие СОМ порта происходило как положено

В какую сторону копать?
Сергей Борщ
QUOTE (bureau @ Dec 20 2016, 17:57) *
В какую сторону копать?
В сторону другой терминальной программы? Это же у нее происходит Internal error.
bureau
Цитата(Сергей Борщ @ Dec 20 2016, 18:10) *
В сторону другой терминальной программы? Это же у нее происходит Internal error.

Пробовал, и другую пробовал, и Putty пробовал...
bureau
Если использовать версию STM32Cube_FW_F4_V1.13.0 то
IAR -- работает
GCC -- работает но с вышеизложенными симптомами

Проект под GCC подготавливал согласно данному видео https://www.youtube.com/watch?v=Q68PBMGceqs
bureau
Цитата(bureau @ Dec 20 2016, 17:57) *
Win10 64x, CubeMX, STM32F407 discovery
Error in OpenPort: Internal Error when initializing COM3

Была попытка запуска на Win7. Которая оказалось удачной. Предварительно -- проблема с драйверами.
Но вопрос того что один и тот же проект сгенеренный CubeMX под IAR -- работает, а GCC -- нет, остается открытым. Может там какте-то тайминги вступают в работу... хотя...
www...
Была такая же проблема, глубоко не копал, но проблему решил. В кубе при генерации проекта heapsize ставьте 0х400 все будет работать
bureau
Пробовал, и так и сяк... не помогает sad.gif
В main добавляю простой код и все, работать перестает
Код
for (unsigned char i = 0; i < 32; i++)
{
    transmitBuffer[i] = i + 1;
}
bureau
Вот тут ребята тоже бадались с подобной проблемой...
https://community.st.com/thread/14400
https://community.st.com/thread/34502-open-...-using-haldelay
Это просто жесть (см. картинку)...
Нажмите для просмотра прикрепленного файла
Хтось
Тоже столкнулся с такой же проблемой. При подключении к компьютеру stm32f746 через USB и установки драйверов на последовательный USB порт с сайта ST, порт определялся с ошибкой 10 (устройство не может быть запущено).
Я так и не смог найти, где изменить размер кучи (Heap size), но проблема решилась по совету из этой темы: https://community.st.com/message/91508 После уменьшения HS max packet size с 512 до 64 все заработало. Где это изменяется в Cube MX я так и не нашел, поэтому изменил значение CDC_DATA_HS_MAX_PACKET_SIZE в файле usbd_cdc.h
Genadi Zawidowski
У Вас плата из стандартных или своя?
На каком (HS или FS устройстве) поднято USB и какой windows?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.