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

Уже появилась в CubeMX поддержка STM32F3. Сделал проект для STM32F3Discovery. Подключаю к компьютеру - обнаруживается Virtual COM Port. Но как его использовать? В main программе на месте пользовательского кода - пустые места. Наверное, где-то описаны пара функций для работы - принять, послать. И буферы создать нужно. Не вижу ни в документации, ни в примерах. Поможите, люди добрые!

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


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

посмотрите в файле usbd_cdc_if.c,

CDC_Transmit_FS и callback CDC_Receive_FS

Пробовал эти функции, но ... их не видит проект.

Кое-что получается с

USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf_Ch, 4);

USBD_CDC_TransmitPacket(&hUsbDeviceFS);

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


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

Пробовал эти функции, но ... их не видит проект.

Кое-что получается с

USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf_Ch, 4);

USBD_CDC_TransmitPacket(&hUsbDeviceFS);

Что значит не видит проект?

Файл исключен из сборки?

Самый простой способ проверить работу, поставить брекпоинт в функцию CDC_Receive_FS, затем в терминале на PC что либо отправить

Изменено пользователем Integro

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


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

Из мейн функции не видны. Можно инклюдами заголовок добавить. Но, если этого не сделано, значит их использовать не нужно.

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


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

Из мейн функции не видны. Можно инклюдами заголовок добавить. Но, если этого не сделано, значит их использовать не нужно.

Если это не сделано значит это нужно сделать.) Не стоит доверять сырым либам от ST, мы в мае месяце не один баг у них нашли, благо обновления основную часть устранили.

 

Для работы с Виртуальным портом необходимо использовать функции описанные выше.

1. Проверить приходят ли данные в CDC_Receive_FS для этого просто ставим бряк, как я писал выше, если приходят в данной функции вызываем вашу реализация функции обработки принятых данных.

2. Сделать обертку для CDC_Transmit_FS в каком ни-будь вашем файле ("Platform.c" или "hal_DeviceName.c" не суть что там у вас) CDC_Write.

 

А вообще на данный момент не рекомендовал бы использовать Cube, подождите пару месяцев, а текущий проект доделайте на CMSIS.

Изменено пользователем Integro

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


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

Кабы я умел программировать USB в STM32, стал бы я связываться с Кубами, Либами, Миддлеварами и пр.

Мой путь обратный - от вышеперечисленного к своему.

Те функции, что я использовал (см. выше), позволили передавать массив символов. Вокруг них и буду танцевать.

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


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

Кабы я умел программировать USB в STM32, стал бы я связываться с Кубами, Либами, Миддлеварами и пр.

Мой путь обратный - от вышеперечисленного к своему.

Те функции, что я использовал (см. выше), позволили передавать массив символов. Вокруг них и буду танцевать.

Посмотрите на реализацию функции CDC_Transmit_FS а затем на ваш вариант, да! это одно и тоже.

Теперь, с точки зрения работоспособности кода... можно писать говнокод. Но можно сделать красивее, практичнее и тд...

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


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

Вот функция из 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 */ 
}

Это означает, что мне нужно поработать там своей головой?

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


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

...

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

Изменено пользователем IgorKossak
бездумное цитирование

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


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

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

Крайняя (не последняя, надеюсь :rolleyes:)

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

 

Пытался отладчик запустить, трассировку - ничего не видит. Пытался другой проект запустить - тоже самое. И логический анализатор ничего не показывает. А ведь показывал. Обновил Keil - не помогло. Обновил прошивку ST-Link на Discovery - вообще не программируется, не отлаживается. Вернул назад Keil, и ST-Link. По-прежнему, трассировка не работает.

Кто сбил мой ераплан прицел? Горячие дни.

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


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

а галочки дебуг и трейс информация, 0 оптимизация (по умолчанию в кейле не 0, default - это -2 вроде) и прочая фигня стоят?

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


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

а галочки дебуг и трейс информация, 0 оптимизация (по умолчанию в кейле не 0, default - это -2 вроде) и прочая фигня стоят?

Стоят. Достану из-под стола осциллограф, посмотрю на выводах...

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


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

Пытался отладчик запустить, трассировку - ничего не видит.

Ну да, колбэки - они такие, прямолинейный подход не поможет. ;)

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


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

Ну да, колбэки - они такие, прямолинейный подход не поможет. ;)

Нет, я другой проектик запустил, там нет таких страхов. Но все равно ЛА не работает. В окне "Watch 1" вижу, что переменная меняется, а в окне Logic Analyzer - нет. Она по разным цепям попадает. Хотя на SWO вижу, что-то выдается.

P.S. не ползет время в ЛА.

P.P.S. Да, и перемычку SB10 на F3Discovery я давно запаял. И что-то видел раньше, не помню, то ли, что хочу сейчас, или другое...

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


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

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

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

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

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

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

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

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

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

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