Попробовал на двух платах Discovery (STM32F407, STM32F429) создать CDC устройство в STM32CubeMX. И оба раза компьютер обнаруживает устройство, устанавливает драйвер, но не может его запустить. И в настройках USB в Cube менял, и все равно. ОС - Windows 7 x64. Что не так? Полный интернет подобных сообщений, но ни одного ответа я не нашел.
И кабель менял, и в другую щель засовывал.
Цитата(ViKo @ May 13 2014, 08:26)

Попробовал на двух платах Discovery (STM32F407, STM32F429) создать CDC устройство в STM32CubeMX. И оба раза компьютер обнаруживает устройство, устанавливает драйвер, но не может его запустить. И в настройках USB в Cube менял, и все равно. ОС - Windows 7 x64. Что не так? Полный интернет подобных сообщений, но ни одного ответа я не нашел.
И кабель менял, и в другую щель засовывал.

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

C 32 битнымми windows плата работает?
Если да отключите проверку подписи драйвера в 64 битной windows.
Думаю Вы правы, причина может быть именно в этом, хотя у меня заработало и без отключения цифровой подписи драйвера.
Может какая-то старая версия драйвера.
Цитата(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 не работал, не имею.

Версия драйвера - последняя, что есть, 1.3.1
С этим возился дома, сейчас ничего больше сказать не могу.
KnightIgor
May 13 2014, 12:14
Цитата(ViKo @ May 13 2014, 11:01)

Ну так там по ссылке написал один, что решил все проблемы, изменив размер буфера на 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, надо покрутить дескриптор на предмет тех самых размеров буфера и временнЫх параметров.
Цитата(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 не работал, не имею.

Версия драйвера - последняя, что есть, 1.3.1
С этим возился дома, сейчас ничего больше сказать не могу.
На форуме ST была рекомендация заменить строку:
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
в файле usbd_cdc.c
на :
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
Цитата(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
May 15 2014, 20:13
Цитата(ViKo @ May 15 2014, 23:24)

Не помогло. Результат тот же.
Попробуйте подключить устройство и затем удалить его в диспетчере.
A. Fig Lee
May 15 2014, 20:36
Я бы посмотрел что на USB творится. "Device Monitoring Studio" то ли 30 то ли 40 баксов всего, да и трайал наверное есть.
https://my.st.com/public/STe2ecommunities/m...urrentviews=328Почитав эту тему, изменил размер кучи до 0x0400, и COM Port заработал. Буду пытаться разбираться дальше...
Golikov A.
May 15 2014, 21:09
я вот смотрел на это
pdev->pClassData = (void *) USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
и вот мне подумалось, что тот кто код отлаживал сначала заметил что получил неверный указатель. Потом изменил это и кучу, и все заработало, сделал выводы что надо так сделать.
А мне кажется что надо поглядеть что возвращает USBD_malloc, наверняка в начальном варианте с маленькой кучей оно возвращало 0, как код ошибки что не удалось выделить буфер...
Я там еще других настроек в CubeMX покрутил, в частности, задал скорость ножек USB High...
В-общем, пока ответ не готов.
Цитата
Я бы посмотрел что на USB творится. "Device Monitoring Studio" то ли 30 то ли 40 баксов всего, да и трайал наверное есть.
Есть и бесплатная версия
http://freeusbanalyzer.com/
За ссылки-советы - спасибо!
Я пользовался USBlyzer, USBTrace, но не в этом случае.
Atlantis-
Oct 13 2014, 07:30
У меня та же проблема, как и у автора темы. Никогда не имел дело с выделением памяти, подскажите это фишка RTOS или нет? и вообще что делает функция USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); куда она выделяет память, как и для чего? каковы последствия увеличения или уменьшения Heap_Size.
Функция выдает указатель на первый адрес созданной "последовательной кучке байт памяти" для буфера приема-передачи вроде. Проблема бывает из-за нехватки этой "кучки", либо неправильного описания типа (байт или слово).
Советую использовать примеры из комплекта "CUBE EXAMPLE" и подпиливать их для себя (либо выдрать участки кода), чем генерировать голый проект Куба. Либо сравнивать отличия.
Atlantis-
Oct 16 2014, 06:49
Цитата(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 что то нужное режет в файлах
Да, это самое.
Ну как-так не нашли...
Вот путь: STM_CUBE\STM32Cube_FW_F4_V1.3.0\Projects\STM324xG_EVAL\Applications\USB_Device\CDC_Standalone
CUBE не режет, он просто генерирует комментарий "здесь программист должен написать свой код обработки" ;-)
Atlantis-
Oct 16 2014, 13:05
Цитата(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
Dec 4 2014, 19:31
У меня было такое. На Х64 не заработало. ПОСТАВИЛ х32, убил виндовый драйвер и поставил от ST. После этого всё заработало.
Победил изменением размера кучи до 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?
Мож кто примером поделится.
Возвращаюсь к теме (нашел поиском по 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-
May 12 2015, 13:24
Цитата(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, то как будто через задний проход пролез.
по моему так и есть
Цитата(Atlantis- @ May 12 2015, 16:24)

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

Одно доброе дело сделал. Проверяю, что USB инициализировалась перед использованием. В Main. Теперь USB устройство определяется стабильно.
while (hUsbDeviceFS.dev_state != USBD_STATE_CONFIGURED) { }
Мелкое замечание, не стоящее отдельной темы. Разве что, если бы была тема "STM32 в Кубе".
При установке в STM32CubeMX частоты MAIN_PLL для STM32F207, коэффициент умножения N невозможно выбрать меньше 192. Для этого частоту HSE придется делить до 1 MHz. А в руководстве на STM32F2xx сказано, что при 2 MHz джиттер меньше (при этом коэффициент N нужно бы взять, например, 120). А диапазон PLLN 192 - 432 показан просто конкретно для случая 1 MHz на входе PLL. А Кубописатели схалтурили, ограничились только этим.
bureau
Dec 20 2016, 15:57
Может кто-то сталкивался...
Win10 64x, CubeMX, STM32F407 discovery
Проект генерится из куба, винда драйвера ставит и определят COM порт вроде как без ошибок. Но вот когда пытаюсь подключится терминальной программой, то получаю
Error in OpenPort: Internal Error when initializing COM3
И то, были моменты когда открытие СОМ порта происходило как положено
В какую сторону копать?
Сергей Борщ
Dec 20 2016, 16:10
QUOTE (bureau @ Dec 20 2016, 17:57)

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

В сторону другой терминальной программы? Это же у нее происходит Internal error.
Пробовал, и другую пробовал, и Putty пробовал...
bureau
Dec 20 2016, 17:34
Если использовать версию STM32Cube_FW_F4_V1.13.0 то
IAR -- работает
GCC -- работает но с вышеизложенными симптомами
Проект под GCC подготавливал согласно данному видео
https://www.youtube.com/watch?v=Q68PBMGceqs
bureau
Dec 22 2016, 16:50
Цитата(bureau @ Dec 20 2016, 17:57)

Win10 64x, CubeMX, STM32F407 discovery
Error in OpenPort: Internal Error when initializing COM3
Была попытка запуска на Win7. Которая оказалось удачной. Предварительно -- проблема с драйверами.
Но вопрос того что один и тот же проект сгенеренный CubeMX под IAR -- работает, а GCC -- нет, остается открытым. Может там какте-то тайминги вступают в работу... хотя...
www...
Dec 26 2016, 04:40
Была такая же проблема, глубоко не копал, но проблему решил. В кубе при генерации проекта heapsize ставьте 0х400 все будет работать
bureau
Dec 27 2016, 09:38
Пробовал, и так и сяк... не помогает

В main добавляю простой код и все, работать перестает
Код
for (unsigned char i = 0; i < 32; i++)
{
transmitBuffer[i] = i + 1;
}
bureau
Dec 27 2016, 11:14
Тоже столкнулся с такой же проблемой. При подключении к компьютеру 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
Feb 22 2017, 17:09
У Вас плата из стандартных или своя?
На каком (HS или FS устройстве) поднято USB и какой windows?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.