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

USB CDC на STM32F4 с HAL: отследить окончание передачи


caramba

Рекомендуемые сообщения

Всем доброго времени суток. Появилась необходимость использовать USB на STM32F407VG. В качестве теста собрал в CubeMX проект с USB CDC и нарвался на проблему: если отправлять одну порцию данных сразу после другой (т.е., несколько раз подряд вызывать CDC_Transmit_FS без задержек), то до адресата доходят 1-2 порции, после чего работа USB прекращается. Если вставить задержки между отправками -- проблем нет. Как я понимаю, причина в том, что я пытаюсь отправить новые данные, когда старые ещё не ушли. Если дело в этом, то перед отправкой нужно проконтролировать, чтобы передатчик освободился, т.е., нужна обработка какого-либо флага или callback-а. Я нашёл только обработчик прерывания OTG_FS_IRQHandler и флаг USB_OTG_DIEPINT_TXFE, который смотрю в обработчике, но это не помогает.
Может, кто сталкивался с такой проблемой и знает, как решить? Спасибо

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

Сам наконец-то разобрался (хотя обычно, если спрашиваю на форуме, это значит, что надежды нет). На случай, если кому-то понадобится. В CDC_Transmit_FS есть такой кусок кода:

USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
  if (hcdc->TxState != 0){
    return USBD_BUSY;
  }

В hcdc->TxState и лежит нужная информация. Использовать это в том виде, что есть, не всегда удобно, поэтому можно вынести как отдельную проверку перед вызовом CDC_Transmit_FS

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...