реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> STM32CubeMX и USB CDC, какие функции использовать?
ViKo
сообщение Jul 14 2014, 18:00
Сообщение #1


Универсальный солдатик
******

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



Уже появилась в CubeMX поддержка STM32F3. Сделал проект для STM32F3Discovery. Подключаю к компьютеру - обнаруживается Virtual COM Port. Но как его использовать? В main программе на месте пользовательского кода - пустые места. Наверное, где-то описаны пара функций для работы - принять, послать. И буферы создать нужно. Не вижу ни в документации, ни в примерах. Поможите, люди добрые!
Go to the top of the page
 
+Quote Post
Integro
сообщение Jul 15 2014, 11:38
Сообщение #2


Частый гость
**

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



посмотрите в файле usbd_cdc_if.c,
CDC_Transmit_FS и callback CDC_Receive_FS
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 15 2014, 20:01
Сообщение #3


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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);
Go to the top of the page
 
+Quote Post
Integro
сообщение Jul 16 2014, 07:50
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 16 2014, 08:19
Сообщение #5


Универсальный солдатик
******

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



Из мейн функции не видны. Можно инклюдами заголовок добавить. Но, если этого не сделано, значит их использовать не нужно.
Go to the top of the page
 
+Quote Post
Integro
сообщение Jul 16 2014, 12:49
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 16 2014, 16:18
Сообщение #7


Универсальный солдатик
******

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



Кабы я умел программировать USB в STM32, стал бы я связываться с Кубами, Либами, Миддлеварами и пр.
Мой путь обратный - от вышеперечисленного к своему.
Те функции, что я использовал (см. выше), позволили передавать массив символов. Вокруг них и буду танцевать.
Go to the top of the page
 
+Quote Post
Integro
сообщение Jul 17 2014, 15:06
Сообщение #8


Частый гость
**

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



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

Посмотрите на реализацию функции CDC_Transmit_FS а затем на ваш вариант, да! это одно и тоже.
Теперь, с точки зрения работоспособности кода... можно писать говнокод. Но можно сделать красивее, практичнее и тд...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 20 2014, 10:14
Сообщение #9


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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 */
}

Это означает, что мне нужно поработать там своей головой?
Go to the top of the page
 
+Quote Post
Integro
сообщение Jul 23 2014, 08:12
Сообщение #10


Частый гость
**

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



Цитата(ViKo @ Jul 20 2014, 13:14) *
...

Ха, ща разберемся, у меня не так) это последняя версия Cube? Говорю сырой этот куб еще....

Сообщение отредактировал IgorKossak - Jul 24 2014, 13:46
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 24 2014, 12:19
Сообщение #11


Универсальный солдатик
******

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



Цитата(Integro @ Jul 23 2014, 11:12) *
Ха, ща разберемся, у меня не так) это последняя версия Cube? Говорю сырой этот куб еще....

Крайняя (не последняя, надеюсь rolleyes.gif)
Я тут решил взяться за изучение всех функций по-порядку, закопался...

Пытался отладчик запустить, трассировку - ничего не видит. Пытался другой проект запустить - тоже самое. И логический анализатор ничего не показывает. А ведь показывал. Обновил Keil - не помогло. Обновил прошивку ST-Link на Discovery - вообще не программируется, не отлаживается. Вернул назад Keil, и ST-Link. По-прежнему, трассировка не работает.
Кто сбил мой ераплан прицел? Горячие дни.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 24 2014, 12:25
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



а галочки дебуг и трейс информация, 0 оптимизация (по умолчанию в кейле не 0, default - это -2 вроде) и прочая фигня стоят?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 24 2014, 13:05
Сообщение #13


Универсальный солдатик
******

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



Цитата(Golikov A. @ Jul 24 2014, 15:25) *
а галочки дебуг и трейс информация, 0 оптимизация (по умолчанию в кейле не 0, default - это -2 вроде) и прочая фигня стоят?

Стоят. Достану из-под стола осциллограф, посмотрю на выводах...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jul 24 2014, 14:32
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(ViKo @ Jul 24 2014, 16:19) *
Пытался отладчик запустить, трассировку - ничего не видит.

Ну да, колбэки - они такие, прямолинейный подход не поможет. wink.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jul 24 2014, 14:51
Сообщение #15


Универсальный солдатик
******

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



Цитата(Tahoe @ Jul 24 2014, 17:32) *
Ну да, колбэки - они такие, прямолинейный подход не поможет. wink.gif

Нет, я другой проектик запустил, там нет таких страхов. Но все равно ЛА не работает. В окне "Watch 1" вижу, что переменная меняется, а в окне Logic Analyzer - нет. Она по разным цепям попадает. Хотя на SWO вижу, что-то выдается.
P.S. не ползет время в ЛА.
P.P.S. Да, и перемычку SB10 на F3Discovery я давно запаял. И что-то видел раньше, не помню, то ли, что хочу сейчас, или другое...
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016