bureau 0 22 декабря, 2016 Опубликовано 22 декабря, 2016 · Жалоба Win10 64x, CubeMX, STM32F407 discovery Error in OpenPort: Internal Error when initializing COM3 Была попытка запуска на Win7. Которая оказалось удачной. Предварительно -- проблема с драйверами. Но вопрос того что один и тот же проект сгенеренный CubeMX под IAR -- работает, а GCC -- нет, остается открытым. Может там какте-то тайминги вступают в работу... хотя... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
www... 0 26 декабря, 2016 Опубликовано 26 декабря, 2016 · Жалоба Была такая же проблема, глубоко не копал, но проблему решил. В кубе при генерации проекта heapsize ставьте 0х400 все будет работать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bureau 0 27 декабря, 2016 Опубликовано 27 декабря, 2016 · Жалоба Пробовал, и так и сяк... не помогает :( В main добавляю простой код и все, работать перестает for (unsigned char i = 0; i < 32; i++) { transmitBuffer[i] = i + 1; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bureau 0 27 декабря, 2016 Опубликовано 27 декабря, 2016 · Жалоба Вот тут ребята тоже бадались с подобной проблемой... https://community.st.com/thread/14400 https://community.st.com/thread/34502-open-...-using-haldelay Это просто жесть (см. картинку)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Хтось 0 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба Тоже столкнулся с такой же проблемой. При подключении к компьютеру 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 22 февраля, 2017 Опубликовано 22 февраля, 2017 · Жалоба У Вас плата из стандартных или своя? На каком (HS или FS устройстве) поднято USB и какой windows? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 25 июня, 2019 Опубликовано 25 июня, 2019 (изменено) · Жалоба On 5/13/2014 at 10:26 AM, ViKo said: Таже проблема с STM32H743ZI (на плате Nucleo и на моей собственной), пользуюсь USB FullSpeed со встроенной физикой. В Windows 10 порт появляется, но не открывается терминальными программами и моей собственной на Qt и на C#. C# пишет "The parameter is incorrect", RealTerm пишет тоже самое, PuTTY просто не работает, но все работает с программой Tera Term. Также все работает в Linux Ubuntu x64 и в Raspbian x32. Минимальный размер кучи увеличивал, отредактировал также одну ошибку в дискрипторе usbd_desc.c ===>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 - программа UsbView от Microsoft Но в Windows 10 так и не работает Изменено 25 июня, 2019 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 25 июня, 2019 Опубликовано 25 июня, 2019 · Жалоба bDeviceSubClass должен быть равен 0. На десятке не проверял - негде, а с XP, семеркой, линухом Mint и андроидом работает. Вот мой дескриптор, если чем-то поможет: descriptor_data<device> const Device_descriptor = { sizeof(device), { { sizeof(device), type::DEVICE }, 0x0200, device_class::COMMUNICATION, device_subclass::UNSPECIFIED, device_protocol::UNSPECIFIED, 64, // bMaxPacketSize0 0x0483, // STMicroelectronics 0x5740, // STM32 Virtual ComPort in FS Mode 0x0200, // Device release number (2.0 in STM32cube) 1, // manufacturer string index 2, // product string index 3, // serial number string index 1 // bNumConfiguration } }; struct config_descriptor { config Config; config::cdc CDC; } __attribute__((__packed__)); descriptor_data<config_descriptor> const Config_descriptor = { sizeof(config_descriptor), { { // config { sizeof(config), type::CONFIGURATION }, sizeof(config_descriptor), 2, // Interfaces 1, // bConfigurationValue 0, // iConfiguration { false, // remote wakeup true, // self powered 1 // must be 1 }, 500 / 2, // 500 mA, GSM consumption is high enough }, { //CDC { // control { // interface { sizeof(config::interface), type::INTERFACE }, 0, // bInterfaceNumber 0, // bAlternateSetting 1, // bNumEndpoints interface_class::CDC_COMMUNICATION, interface_subclass::CDC_ABSRTACT_CONTROL, // Abstract modem interface_protocol::CDC_ITU_T_V250, // AT-commands 0, // string index }, { // functional::Header { { sizeof(config::cdc::functional::header), type::CS_CDC_INTERFACE }, config::cdc::functional::subtype::HEADER }, 0x110 // CDC specification revision }, { // functional::CallManagement { { sizeof(config::cdc::functional::call_management), type::CS_CDC_INTERFACE }, config::cdc::functional::subtype::CALL_MANAGEMENT }, { true, // Call management enabled true, // Over data class }, 1 // Data interface }, { // functional::AbstractControlManagement { { sizeof(config::cdc::functional::abstract_control_management), type::CS_CDC_INTERFACE }, config::cdc::functional::subtype::ABSTRACT_CONTROL_MANAGEMENT }, { false, // Features true, // Line false, // SendBreak false, // NetworkConnection }, }, { // functional::Union { { sizeof(config::cdc::functional::union_<1>), type::CS_CDC_INTERFACE }, config::cdc::functional::subtype::UNION }, 0, {1} }, { // endpoint, { sizeof(config::endpoint), type::ENDPOINT }, { 2, config::endpoint::INPUT }, { config::endpoint::INTERRUPT }, 8, // max packet size 128 // poll interval, ep not used, max interval }, }, { // data { // interface { sizeof(config::interface), type::INTERFACE }, 1, // bInterfaceNumber 0, // bAlternateSetting 2, // bNumEndpoints interface_class::CDC_DATA, interface_subclass::UNSPECIFIED, interface_protocol::CDC_NO_CLASS_SPECIFIC, 0, // string index }, { // endpoint_out { sizeof(config::endpoint), type::ENDPOINT }, { 1, config::endpoint::OUTPUT }, { config::endpoint::BULK }, 64, // Max packet size 0 // poll interval (not used) }, { // endpoint_in { sizeof(config::endpoint), type::ENDPOINT }, { 1, config::endpoint::INPUT }, { config::endpoint::BULK }, 64, // max packet size 0 // poll interval (not used) }, }, }, }, }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 26 июня, 2019 Опубликовано 26 июня, 2019 (изменено) · Жалоба Спасибо за ответ, в новых версиях FirmWare структуры выглядят несколько по другому. Device_SubClass я исправлял на 0, но это не играет роли. Оказалось, что для STM32H7 надо пользоваться FW1.3.2, с ней все в порядке, а FW1.4.0 работает некорректно. От CubeMX 5.2.1 или CubeMX4.27 не зависит. Интересно, что Си функции fopen("COM6", "r+"), fwrite, fgetc, fclose - работают и в Windows 10, без всякой конфигурации. Проблема у FW1.4.0 именно в конфигурации COM порта - специализированным библиотекам не удается записать в COM порт какой-то параметров (скорость передачи, количество бит или т.п.) - из-за это вылетает исключение не верные параметры. Изменено 26 июня, 2019 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Manfred 0 26 июня, 2019 Опубликовано 26 июня, 2019 (изменено) · Жалоба При добавление в CubeMX 5.2.1 + FW1.3.2 шины FMC (Mux PSRAM) виртуальный COM порт перестает записывать параметры. Если закоментировать инициализацию FMC, то виртуальный COM порт опять работает полноценно. MX_USB_DEVICE_Init(); // MX_FMC_Init(); Замена порядка инициализации не помогает. Снятие разрешения на запись в FMC в CubeMX тоже не влияет. В варианте CubeMX 4.27.0 и FW1.3.2 все еще хуже. В функции MX_USB_DEVICE_Init(), нет инициализации HAL_PWREx_EnableUSBVoltageDetector(), если добавить в ручную, работает не стабильно. При включенном USB кабеле микроконтроллер при включение питания зависает, так что его даже нельзя его стереть, пока не отключишь UBS кабель. C FMC таже проблема. В варианте CubeMX 5.2.1 + FW1.4.0 запись параметров виртуального COM порта не работает не зависимо, есть FMC или нет. Изменено 27 июня, 2019 пользователем Manfred Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LavrS 0 22 октября, 2020 Опубликовано 22 октября, 2020 · Жалоба 26.06.2019 в 13:41, Manfred сказал: В варианте CubeMX 5.2.1 + FW1.4.0 запись параметров виртуального COM порта не работает не зависимо, есть FMC или нет. Столкнулся с подобной ошибкой записи параметров виртуального COM порта под Windows10 для STM32F411. Использовал разные версии CubeMX и FW вплоть до версий CubeMX 6.0.1 и FW_F4_V1.25.1. Причём с микроконтроллером STM32F373 подобных ошибок никогда не возникало... Соответственно, решить проблему удалось только взяв из репозитория для другого МК (STM32Cube_FW_F3_V1.11.1) нужные файлы для USB и заменив их в своём проекте для STM32F411. Однако, в чём первопричина я так и не разобрался(((. Если кто выяснит - из-за чего конкретно глюк и как его можно пофиксить - отпишитесь, плиз.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bear_ku 0 11 ноября, 2020 Опубликовано 11 ноября, 2020 (изменено) · Жалоба Столкнулся с той же проблемой . На ПК порт открывался и принимались данные если в МК использовалась только функция CDC_Transmit_FS. Как только добавлял свои обработчики в CDC_TransmitCplt_FS или CDC_Receive_FS то порт на ПК не открывался "Error in OpenPort: Internal Error when initializing COM3". Решение проблемы нашел тут: https://stackoverflow.com/questions/40597612/stm32-usb-vcp-virtual-com-port. А точнее: // usbd_cdc_if.c static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length) { static uint8_t tempbuf[7]; /* USER CODE BEGIN 5 */ switch(cmd) { // ... case CDC_SET_LINE_CODING: memcpy(tempbuf, pbuf, sizeof(tempbuf) / sizeof(tempbuf[0])); break; case CDC_GET_LINE_CODING: memcpy(pbuf, tempbuf, sizeof(tempbuf) / sizeof(tempbuf[0])); break; // ... } return (USBD_OK); /* USER CODE END 5 */ } Windows 10 Mcu: STM32F405RGTx. Firmware: STM32Cube FW_F4 V1.25.1 Изменено 11 ноября, 2020 пользователем Bear_ku Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 17 ноября, 2020 Опубликовано 17 ноября, 2020 · Жалоба В моем случае все эти ситуации всегда были связаны с нехваткой выделенной памяти. Помотрите настройки "по умолчанию". Гдето нужно добавить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a_electronic 0 17 февраля, 2021 Опубликовано 17 февраля, 2021 · Жалоба Траблы с USB в классе CDC у STшников качественно закладываются CUBом. Остальные не юзал. Добры молодцы в функцию USBD_CDC_Init(), которая вызывается в прерывании(!) засунули malloc, выделяющий память под хендлер. Вызывать malloc в прерывании вообще ковбойская практика, а с учетом, что RTOS, без которой F407 становится тупым камнем использует свой malloc, то количество потенциальных глюков сложно представить. Как фиксить - это надо делать каждый раз при перегенерации CUBом: 1. Для CDC нужно установить/проверить #define APP_RX_DATA_SIZE 64 #define APP_TX_DATA_SIZE 64 2. Отрехтовать USBD_CDC_Init() 2.1) объявить статическую структуру USBD_CDC_HandleTypeDef hClassCDC; 2.2)забанить // hcdc = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef)); 3) проинициализировать указатель. hcdc = &hClassCDC; 3. В функции закрытия класса соответсвенно забанить вызов free(). После этого VCP должен заработать как настоящий) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться