eroslove 0 2 сентября, 2015 Опубликовано 2 сентября, 2015 · Жалоба Всем привет! Я изучаю новую для себя линейку процов STM32.. Для этих целей прикупил демо-плату STM32F4 Захотел сделать "Hello World" для USB... т.е.: подсоединить эту плату через micro-USB к PC, там увидеть virtual-COM-порт, и подсоединившись к нему увидеть раз в секунду присылаемые "Hello world" Первую часть прошёл: При помощи CubeMX создал проект для своего проца. Очистил распиновку. Вернул тактирование, включил USB_OTG_FS. Указал, что устройство Device only, при подключении должно изображать из себя Virtual COM port. Сгенерил проект для SW4STM32. Проект собрался. При помощи программатора на демо-плате и программы ST-LINK/V2 прошил собранное. Скачал-установил драйвер для VirtualComPort При подсоединении демо-платы в PC появляется COM-порт. Ура. А теперь встал вопрос как его задействовать? Сгенерённый код минималистически прост. Даже не знаю за что цепляться. Погуглил - примеров не нашел. Нашёл какую-то библиотеку, но как её крепить к моему проекту непонятно... много новых непонятных слов и аббревиатур, в частности требует CMSIS - что это за зверь? И есть ли он у меня? В какую сторону копнуть? Когда включал USB_OTG_HS (High-Speed вместо Full-Speed), там хотя бы появлялись линии USB_OTG_HS_ULPI_D0 ... USB_OTG_HS_ULPI_D7 (8 битная шина) и контролирующие линии типа USB_OTH_HS_ULPI_DIR и т.п. Как выставить байт на шину данных разберусь... но как его отправить? Куда смотреть тут? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 6 2 сентября, 2015 Опубликовано 2 сентября, 2015 · Жалоба Вам надо почитать UM1734 STM32Cube USB device library и посмотреть исходники usbd_cdc.c, usbd_cdc.h и как они взаимодействуют с остальными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eroslove 0 10 сентября, 2015 Опубликовано 10 сентября, 2015 · Жалоба Спасибо! Файлы usbd_cdc.c, usbd_cdc.h нашёл, они располагались в Middlewares\USB_Device_Library, но их содержимое увело меня куда-то в дебри... А среди сгенерённых через CubeMX исходных файлов, в папку User, рядом с main.c был файл usbd_cdc_if.c в котором были определены функции: static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len) uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) Глубоко не разобрался, но, используя Transmit, "кирпичик" по выдаче "Hello world" наружу работает. Ещё раз спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 13 июля, 2023 Опубликовано 13 июля, 2023 · Жалоба Мой вопрос к пользователям STM32Cube по части реализации USB/CDC-device (код из Middlewares): Как со стороны контроллера (STM32) узнать, что его к персональному компьютеру подключили? При подключении USB-девайса персональный компьютер формирует виртуальный COM-порт, появление которого пользователь может увидеть в Диспетчере устройств (Device manager), но как узнать об этом со стороны контроллера? Знаю, что в процессе инициализации USB-устройства компьютер обменивается с ним какой-то информацией, а потому USB-устройство, по-видимому, должно знать, что его "инициализировали". Пыталась у hpcd_USB_FS статус звать, вот так: USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; printf( "\r\nUSB State = %d\r\n", hcdc->TxState); Но статус показывает, что всё в порядке, хотя к компьютеру подключения не было. Что еще можно попробовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 45 13 июля, 2023 Опубликовано 13 июля, 2023 · Жалоба 2 hours ago, Xenia said: Что еще можно попробовать? Почитать мурзилку на HAL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 13 июля, 2023 Опубликовано 13 июля, 2023 · Жалоба HСD-функции относятся к хосту (HСD = Host Controller Driver). Со стороны хоста нет проблем определить, что он подцепил девайса. В своем вопросе я даже пример с компьютером привела, когда обнаружение компьютером присоединения внешнего девайса легко диагностируется. И даже жирным шрифтом подчеркнула "как узнать об этом со стороны контроллера?", чтобы не нарваться на ответ, который вы мне дали. И, тем не менее, нарвалась. P.S. Кажется нашла средство, вот оно: if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED) { // устройство подключено } else { // устройство отключено } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться