Перейти к содержанию
    

STM32 как задействовать USB подключаемое в качестве Virtual COM Port

Всем привет!

Я изучаю новую для себя линейку процов 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 и т.п.

Как выставить байт на шину данных разберусь... но как его отправить? Куда смотреть тут?

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам надо почитать

UM1734 STM32Cube USB device library

и посмотреть исходники usbd_cdc.c, usbd_cdc.h и как они взаимодействуют с остальными.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо!

 

Файлы 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" наружу работает.

Ещё раз спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой вопрос к пользователям 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);

Но статус показывает, что всё в порядке, хотя к компьютеру подключения не было.

Что еще можно попробовать?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

HСD-функции относятся к хосту (HСD = Host Controller Driver). Со стороны хоста нет проблем определить, что он подцепил девайса. В своем вопросе я даже пример с компьютером привела, когда обнаружение компьютером присоединения внешнего девайса легко диагностируется. И даже жирным шрифтом подчеркнула "как узнать об этом со стороны контроллера?", чтобы не нарваться на ответ, который вы мне дали. И, тем не менее, нарвалась.

P.S. Кажется нашла средство, вот оно:

if (hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED)
{
// устройство подключено
}
else
{
// устройство отключено
}

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...