Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

USB-CDC для STM32F103

Вчера наконец-то нашел баг в своем коде: я неправильно обрабатывал флаги в обработчике прерывания по получению пакета (когда нужно было очистить флаг CTR_RX)! Ведь тип toggle имеют не только флаги DTOG, но и флаги STAT! А я сохранял лишь DTOG'и, в итоге у меня состояние конечной точки при слишком интенсивном обмене сбрасывалось в unavailable!
А всего-то нужно было сделать вот так:
static void receive_Handler(){ // EP2OUT
    rxNE = 1;
    uint16_t epstatus = KEEP_DTOG_STAT(USB->EPnR[2]);
    USB->EPnR[2] = (epstatus & ~(USB_EPnR_CTR_RX)); // clear RX ctr
}

Ну и в остальных местах пофиксил подобные баги. В итоге все работает, как надо: при приеме пакета CTR_RX сбрасывается, а STAT_RX не меняется, оставаясь NACK. В итоге хост приостанавливает отправку данных вплоть до получения ACK, который я выставляю в функции USB_receive — когда данные уже однозначно пошли в буфер для дальнейшей обработки, и можно в USB-буфер принимать очередную порцию.
Теперь остается во всех остальных USB'шных вещах внести соответствующие изменения.
Tags: stm32, железяки, рукожопие
Subscribe

  • Хеши строковых команд для МК

    Долго я к этому шел, но, похоже, пора уже: однобуквенные команды сложно запоминать (особенно если команд толпа, и большая часть с этими буквами…

  • OBS studio

    В общем, надоумили меня попробовать трансляцию в youtube. Напрямую скринкасты он писать не умеет, но может забирать поток с промежуточного…

  • M$ teams…

    Начал с сегодняшнего дня студентам ЮФУ удаленно лекции читать. У них все завязано на различные корпорации зла. И базовая работа - через teams. ОК,…

promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 2 comments