|
STM32CubeMX и USB CDC, какие функции использовать? |
|
|
|
Jul 15 2014, 20:01
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Integro @ Jul 15 2014, 14:38)  посмотрите в файле usbd_cdc_if.c, CDC_Transmit_FS и callback CDC_Receive_FS Пробовал эти функции, но ... их не видит проект. Кое-что получается с USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf_Ch, 4); USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
|
|
|
|
Jul 16 2014, 07:50
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(ViKo @ Jul 15 2014, 23:01)  Пробовал эти функции, но ... их не видит проект. Кое-что получается с USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf_Ch, 4); USBD_CDC_TransmitPacket(&hUsbDeviceFS); Что значит не видит проект? Файл исключен из сборки? Самый простой способ проверить работу, поставить брекпоинт в функцию CDC_Receive_FS, затем в терминале на PC что либо отправить
Сообщение отредактировал Integro - Jul 16 2014, 08:14
|
|
|
|
|
Jul 16 2014, 12:49
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(ViKo @ Jul 16 2014, 11:19)  Из мейн функции не видны. Можно инклюдами заголовок добавить. Но, если этого не сделано, значит их использовать не нужно. Если это не сделано значит это нужно сделать.) Не стоит доверять сырым либам от ST, мы в мае месяце не один баг у них нашли, благо обновления основную часть устранили. Для работы с Виртуальным портом необходимо использовать функции описанные выше. 1. Проверить приходят ли данные в CDC_Receive_FS для этого просто ставим бряк, как я писал выше, если приходят в данной функции вызываем вашу реализация функции обработки принятых данных. 2. Сделать обертку для CDC_Transmit_FS в каком ни-будь вашем файле ("Platform.c" или "hal_DeviceName.c" не суть что там у вас) CDC_Write. А вообще на данный момент не рекомендовал бы использовать Cube, подождите пару месяцев, а текущий проект доделайте на CMSIS.
Сообщение отредактировал Integro - Jul 16 2014, 12:53
|
|
|
|
|
Jul 17 2014, 15:06
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(ViKo @ Jul 16 2014, 19:18)  Кабы я умел программировать USB в STM32, стал бы я связываться с Кубами, Либами, Миддлеварами и пр. Мой путь обратный - от вышеперечисленного к своему. Те функции, что я использовал (см. выше), позволили передавать массив символов. Вокруг них и буду танцевать. Посмотрите на реализацию функции CDC_Transmit_FS а затем на ваш вариант, да! это одно и тоже. Теперь, с точки зрения работоспособности кода... можно писать говнокод. Но можно сделать красивее, практичнее и тд...
|
|
|
|
|
Jul 20 2014, 10:14
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Вот функция из usbd_cdc_if.c Код /** * @brief CDC_Transmit_FS * Data send over USB IN endpoint are sent over CDC interface * through this function. * @note * * * @param Buf: Buffer of data to be send * @param Len: Number of data to be send (in bytes) * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY */ uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) { uint8_t result = USBD_OK; /* USER CODE BEGIN 8 */ USBD_CDC_SetTxBuffer(hUsbDevice_0, UserTxBufferFS, Len); result = USBD_CDC_TransmitPacket(hUsbDevice_0); /* USER CODE END 8 */ return result; } Вопрос - как?! Как используется параметр Buf? А вот еще один шедевр оттуда же. Код /** * @brief CDC_Receive_FS * Data received over USB OUT endpoint are sent over CDC interface * through this function. * * @note * This function will block any OUT packet reception on USB endpoint * untill exiting this function. If you exit this function before transfer * is complete on CDC interface (ie. using DMA controller) it will result * in receiving more data while previous ones are still not sent. * * @param Buf: Buffer of data to be received * @param Len: Number of data received (in bytes) * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL */ static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 7 */ return (USBD_OK); /* USER CODE END 7 */ } Это означает, что мне нужно поработать там своей головой?
|
|
|
|
|
Jul 23 2014, 08:12
|

Частый гость
 
Группа: Свой
Сообщений: 167
Регистрация: 25-12-09
Из: Минск
Пользователь №: 54 460

|
Цитата(ViKo @ Jul 20 2014, 13:14)  ... Ха, ща разберемся, у меня не так) это последняя версия Cube? Говорю сырой этот куб еще....
Сообщение отредактировал IgorKossak - Jul 24 2014, 13:46
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jul 24 2014, 12:19
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Integro @ Jul 23 2014, 11:12)  Ха, ща разберемся, у меня не так) это последняя версия Cube? Говорю сырой этот куб еще.... Крайняя (не последняя, надеюсь  ) Я тут решил взяться за изучение всех функций по-порядку, закопался... Пытался отладчик запустить, трассировку - ничего не видит. Пытался другой проект запустить - тоже самое. И логический анализатор ничего не показывает. А ведь показывал. Обновил Keil - не помогло. Обновил прошивку ST-Link на Discovery - вообще не программируется, не отлаживается. Вернул назад Keil, и ST-Link. По-прежнему, трассировка не работает. Кто сбил мой ераплан прицел? Горячие дни.
|
|
|
|
|
Jul 24 2014, 14:51
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Tahoe @ Jul 24 2014, 17:32)  Ну да, колбэки - они такие, прямолинейный подход не поможет.  Нет, я другой проектик запустил, там нет таких страхов. Но все равно ЛА не работает. В окне "Watch 1" вижу, что переменная меняется, а в окне Logic Analyzer - нет. Она по разным цепям попадает. Хотя на SWO вижу, что-то выдается. P.S. не ползет время в ЛА. P.P.S. Да, и перемычку SB10 на F3Discovery я давно запаял. И что-то видел раньше, не помню, то ли, что хочу сейчас, или другое...
|
|
|
|
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|