STM32. UART, Прием данных, не зная размера данных. Работа с прерываниями. Урок 7.

Поделиться
HTML-код
  • Опубликовано: 12 дек 2024

Комментарии • 29

  • @timsystemsTS
    @timsystemsTS 4 года назад +2

    Титанический труд. Респектище!

  • @szapsis
    @szapsis Год назад

    Спасибо большое за твой труд!

  • @jorchick
    @jorchick 4 года назад +5

    Как я понял, реализовано получение посимвольно с парсингом по символу "конец строки". В контроллерах STM32 (не знаю во всех ли) есть прерывание по таймауту приема и прерывание по IDLE пакету. Я ожидал, что видео будет про это. Т.к. хотелось бы кое-где использовать данный функционал, но пока не дошли руки его поизучать.

    • @Solderingironspb
      @Solderingironspb  4 года назад

      В примере я работал со знаком “
      ” . Но смысл остается тем же - по любому знаку определить конец строки. Изначально я хотел с таймером заморочиться, типа запомнить время во время прерывания и если после последнего прерывания прошла 1 мс, то считаем, что прием закончен. Но подумал, что такой вариант не совсем универсален.

    • @jorchick
      @jorchick 4 года назад

      @@Solderingironspb У F0 серии есть прерывание по символу (character match). Упрощает данный алгоритм. Определение конца строки можно использовать, когда свой протокол передачи текстовых сообщений. В случае передачи шестнадцатиричных данных не получится указать конец строки. Тут либо указывать в начале пакета размер передаваемых данных, либо делать по таймауту или IDLE.

    • @КузнецовСергей-с7г
      @КузнецовСергей-с7г 4 года назад

      @@Solderingironspb как раз с таймером универсальнее

    • @Solderingironspb
      @Solderingironspb  4 года назад

      Пробовали? есть чем поделиться?

  • @Solderingironspb
    @Solderingironspb  4 года назад +1

    Ребят, в примере был подключен DMA по USART1_RX. Можно было этого не делать. В примере он не используется. Кого интересовала работа с флагом IDLE - см. урок 9 (STM32. UART, Прием данных, не зная размера данных. UART_IT_IDLE. Работа с прерываниями.)

  • @openFrimeTv
    @openFrimeTv 2 года назад

    Приветствую. Подскажите чем отличается callback от IRQHandler.
    Где то читал что прерывание одно на кучу функций (на прием, передачу и тд) и всегда срабатывает IRQHandler.
    А если нам нужно отследить конкретное то используем callback . Я правильно понимаю?

    • @Solderingironspb
      @Solderingironspb  2 года назад

      Добрый день!
      Одно срабатывает в main.c, другое в stm32xxxx_it.c.
      Как я понимаю, IRQHandler срабатывает всегда. Вы там можете уже сами по какому-либо флагу сортировать и получить по сути тот же callback.

  • @MiaminZD
    @MiaminZD 3 года назад +1

    Может я повторяюсь, но такой вопрос, на ардуино нано ведь rx и tx используют 5v, а как тога получается, что Вы на прямую подключаете stm? stm работаю с 3,3v на сколько я знаю.

    • @Solderingironspb
      @Solderingironspb  3 года назад +1

      На stm32 есть пины, толерантные к 5 вольтам. На схемах обозначаются, как «5V tolerant”.

  • @nobodyfreeman6505
    @nobodyfreeman6505 3 года назад

    Привет.
    Сделать более свежий комит по исходникам к этому уроку .

  • @IvanEng747
    @IvanEng747 Год назад

    Как инициализировать передачу в UART на ноги PA9/PA10 в ардуино IDE?

    • @Solderingironspb
      @Solderingironspb  Год назад +1

      Добрый вечер) вообще без понятия, как в ардуино работать с stm32) переходите в нормальную среду и не мучайтесь)

    • @IvanEng747
      @IvanEng747 Год назад

      @@Solderingironspb Ну вы зря так)
      Новое ядро stm32, адаптированное под arduino IDE не уступит по гибкости и даже удобнее с ним работать, чем в cube IDE или mKeil.
      Но я так понял, что stm32 программиста - круче, то, в какой среде он работает и сколько костылей изобрел, чем скорость, удобство работы с кодом и готовые электронные устройства.

    • @Solderingironspb
      @Solderingironspb  Год назад +1

      Ну просто вот, как пример: Вы спрашиваете, как инициализировать передачу в UART на ноги PA9/PA10, что соответствует дефолтным ногам на usart1 у stm32f103. Ремап на PB6/PB7. Это настраивается при ините gpio. Работая с мк без ардуино, Вам не нужно спрашивать у ардуинщиков, что, как и куда. Вы просто откроете даташит и референс мануал, где все описано. Так работать удобнее. Просто многих пугает уход с ардуино. Я это понимаю, сам это проходил. Но спустя уже 3 года, могу с уверенностью сказать, что вообще не жалею об уходе и не собираюсь разбираться в чужом коде, когда легче написать свой по документации.

    • @IvanEng747
      @IvanEng747 Год назад

      @@Solderingironspb На вашем канале вы сравниваете работу с Nano и с STM32 - вот и подумал, возможно знаете.
      А то все привыкли в CubeIDE "тыкать" по микросхеме стрелочкой мышки и генерировать код.
      Через arduino IDE тоже можно задать режим работы ног СТМ-ки.
      // RX TX
      HardwareSerial Serial1(PA10, PA9);
      void setup() {
      Serial1.begin(115200);
      }
      void loop() {
      Serial1.println("Hello World!");
      delay(1000);
      }
      Для меня плюсы arduino IDE - код, который я пишу ... незамусоренный, как после Кьюбовского генератора.

    • @Solderingironspb
      @Solderingironspb  Год назад +1

      Я сейчас на cmsis прогаю) мусора кубовского вообще нет)

  • @AlmazKamalov
    @AlmazKamalov 3 года назад

    А с чего взяли то, что с терминала должен конец строки прийти ввиде \0? Вроде в жизни никогда такого не было. Максимум cr или lf или и то и то.. Чтоб превратить в строку си надо изменить последний символ на \0 ну или предпоследний в зависимости от терминпла

    • @Solderingironspb
      @Solderingironspb  3 года назад

      Так я и сказал, что его там нет. Просто когда я изучал это, то мне все твердили, что \0 там постоянно есть в конце.

    • @AlmazKamalov
      @AlmazKamalov 3 года назад

      @@Solderingironspb странные эти ваши все. Когда я начинал си изучать, то у строк ещё была длина в нулевом индексе вроде. Не помню уж где

  • @РамазанХайбуллин
    @РамазанХайбуллин 3 года назад

    Добрый день, работаю с HAL...по функции HAL_UART_Recive все прекрасно принимается и работает. Но когда отправляются две команды подряд, МК отрабатывает первую, отвечает результат по тому же UARTу, но новые команды уже не принимает. С чем это может быть связано и как это исправить?

    • @Solderingironspb
      @Solderingironspb  3 года назад

      Добрый день. Скиньте проект на solderingiron.notification@yandex.ru я гляну. Так быстрее поймем, в чем дело)

  • @openFrimeTv
    @openFrimeTv 2 года назад

    и еще одно, не пойму зачем очередь. что она дает?

    • @Solderingironspb
      @Solderingironspb  2 года назад

      Ответ кроется в 6 уроке. Это костыль от меня, как отправлять данные, используя IT функцию отправки. Т.к. мы не хотим ожидать завершения отправки сообщения, а хотим делать что-то еще, то пуляем данные, далее гуляем по циклу, возвращаемся к условию, отправилось ли прошлое сообщение. Если отправилось, то пуляем следующее и снова занимаемся своими делами. Может в экономии процессорного времени и есть выгода, но на практике я это редко использую) обычно просто блокирующая функция.