Программирование МК STM32. УРОК 13. HAL. USART. Передача данных

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 73

  • @МаксимДолгорукий-ъ1г
    @МаксимДолгорукий-ъ1г 7 років тому +12

    Ура! Я отправил первое слово по UARTу. Это как в первый раз сказать МАМА!!! Спасибо!!!

    • @alexandrponomarenko4127
      @alexandrponomarenko4127 3 роки тому +1

      Надеюсь, что не великое Русское слово отправил?))))

  • @orazaliseitpenbetov6336
    @orazaliseitpenbetov6336 5 років тому

    Спасибо. Педагогический навыки есть. Приятный голос. Не раздражает. И не чавкаете )). Многие чавкает , очень не приятно и противно слушать.

    • @narodstream552
      @narodstream552  5 років тому

      Спасибо!
      Буду стараться. Это одно из давних видео, посмотрите последние, а вдруг я уже исправился.

  • @ВячеславВасильев-з6е
    @ВячеславВасильев-з6е 8 років тому +9

    Всё заработало на STM32F103C8T6. Спасибо.

  • @BR549DBH
    @BR549DBH 8 років тому +11

    Great video, Thanks for making this video. I used the CC and translated what you are saying to English and there were a few times the translated closed captions made me laugh. One part it talked about eating it. I will be watching more of your videos. Greetings for Tulsa Oklahoma. USA.

    • @narodstream552
      @narodstream552  8 років тому +1

      I am very happy that you liked my lessons!

  • @DrargonsM
    @DrargonsM 8 років тому +1

    С нетерпением жду новых уроков! лайк"

  • @Helipro
    @Helipro 5 років тому +1

    Здравствуйте! на 14:23 вы упомнянули про примеры от HAL, скажите, пожалуйста,где их можно найти? ссылку если можно

  • @street_chronicles
    @street_chronicles 8 років тому +1

    Отличные видео! Так держать! Побольше подписчиков и новых видео!

  • @Maksim_Inozemtsev_HD
    @Maksim_Inozemtsev_HD 7 років тому +1

    Вы крутой) очень здорово, огромное спасибо)

  • @dmitriyfilatov8658
    @dmitriyfilatov8658 4 роки тому +2

    Вместо ручного подсчета символов можно записать (sizeof str / sizeof str[0])

  • @pashka-cherepashka
    @pashka-cherepashka 7 років тому +1

    Огромное спасибо за урок!!

    • @narodstream552
      @narodstream552  7 років тому

      И Вам спасибо за оценку!

  • @feodor17sumkin
    @feodor17sumkin 6 років тому

    Владимир, а можно еще узнать. А частоту под USART выставлять нужно? У меня на него идет 54 Мгц, многовато наверное, мне больше 9600 мб/с не нужно. Или он автоматически возьмет ту частоту, которая ему нужна, если в настройках написать 9600?

  • @Ljutik123
    @Ljutik123 8 років тому

    Замечательные видео. Хотелось бы урок про CAN увидеть

    • @narodstream552
      @narodstream552  8 років тому +2

      Ну да. Мне тоже хотелось. Но нигде не нашел. Опять всё придется делать самому.

  • @AVRshik
    @AVRshik 6 років тому +1

    В случае если примерно каждое пятое сообщение проскакивает в духе "USART Tran®+‹5USA*ўЙ…№smit" грешить надо на погрешность внешнего кварца?
    P.S. Сообщение в кавычках не редактировал, такое выдал терминал))

  • @ВиталийСергеев-н7ф

    Подскажите,
    а как работать с RS485 ?

  • @ДмитрийТисов-ж6я
    @ДмитрийТисов-ж6я 7 місяців тому

    Спасибо

  • @АРСЭнергия
    @АРСЭнергия 7 років тому

    Доброе время суток. Мучаюсь с уарт уже некоторое время. опыта немного. Мне надо принимать и отправлять байты. Сделано все халом. стандартные функции приема и передачи по прерыванию. созданы буфера на прием и передачу. Общение между 2мя stm32f030k6 линии связи развязаны оптикой 817. Скорость от 600 до 9600. Работает. Если запускать одновременно.Но, стоит поиграться во время работы с питанием одного мк, или передергивать одну из линий связи, один из процов уходит в хард фаулт. а мне бы не хотелось чтоб проц прерывал работу в случае сбоя. Причем один и тот же код работы уарта ведет себя по разному при добавлении его в разные проекты. Как можно исправить. И возможно ли пообщатсья с вами чтоб решить этот вопрос?

  • @feodor17sumkin
    @feodor17sumkin 6 років тому

    Владимир, можно узнать про переходники на 3:41
    Я вот что опасаюсь. У STM входы 3-вольтовые, а эти платы питаются от USB, и скорей всего они 5 вольтовые. Они не сжигают порты?
    Я конечно слышал, что порты у STM толерантны к 5 вольтам, но может для подстраховки поставить какой-нибудь согласователь уровней? Померьте напряжение на выходах этих модулей. Заранее спасибо!

    • @narodstream552
      @narodstream552  6 років тому

      У меня пока ничего не сгорело. И согласователей никаких не ставил. Последнее время пользуюсь красными FTDI.

    • @feodor17sumkin
      @feodor17sumkin 6 років тому

      Ну может микроконтроллер работает на грани и на последнем издыхании? Пока новый - может и тянет кое-как, а состарится и откажет в самый ответственный момент.

  • @timelord1137
    @timelord1137 5 років тому +1

    Спасибо)

  • @ОлегАсмолов-й5н
    @ОлегАсмолов-й5н 4 роки тому

    Как корректно восстановить связь после обрыва линии ?

  • @ВладКотейко-й1р
    @ВладКотейко-й1р 5 років тому +1

    Usart1 только у меня не работает ?
    И почему вы используете usart2 ???

    • @Vargaftik
      @Vargaftik 4 роки тому

      На STM32F4 Discovery (STM32F407VGT) у меня тоже не работал первый USART, вместо слов передавал . А второй работает как надо

  • @Narcil18
    @Narcil18 6 років тому

    Спасибо за уроки!
    При попытках повторить проект на STM32F429 программа CubeMX к USART присваивает пины RX PA3, а TX к PA2. В результате почему то информация не передавалась. Помогло присвоение других пинов контроллера RX PD6, а TX PD5. Может у кого то есть мнения почему так могло получится?

  • @feodor17sumkin
    @feodor17sumkin 6 років тому

    Можно еще детский вопрос )) Переходникам нужны драйверы, или они просто втыкаются в свободный USB и тут же появляется виртуальный com порт.

    • @mykhailomorhal2181
      @mykhailomorhal2181 6 років тому

      Деколи треба, а деколи і ні. В Менеджері пристроїв зразу буде видно ваш пристрій. Якщо буде написано що невідомий пристрій то треба вигуглити драйвер

  • @Ljutik123
    @Ljutik123 8 років тому

    Кстати еще. Вероятно, есть готовая библиотека по MODBUS. Было бы очень полезно узнать.

    • @narodstream552
      @narodstream552  8 років тому

      Есть такая библиотека, причем бесплатная, но мне не понравилась.

  • @vad741
    @vad741 4 роки тому

    Чуть не по теме. Кто то пробовал использовать встроенный в STM32 вычислитель CRC для вычисления 16 битной суммы? Есть примеры? А то кругом только CRC32.

  • @Helipro
    @Helipro 8 років тому

    Здравствуйте! Скажите, пожалуйста, как передавать число? Например если я хочу передать счетчик таймера

    • @narodstream552
      @narodstream552  8 років тому +1

      Здравствуйте! Я так думаю, что Вы хотите передать какое-то число именно через шину USART. Как вариант уложить его в буфер побайтно передать. Такая практика широко используется в моих уроках по датчикам MEMS, когда мы передаем 16-битные показания в шину USART и USB. Так что советую посмотреть и, я думаю, всё станет предельно понятно.

    • @Helipro
      @Helipro 8 років тому

      Да, все верно, хочу передать число по USART.
      Искал MEMS в ваших уроках, такого слова в названиях не нашел.
      Скажите, пожалуйста, как называется урок? обязательно посмотрю

    • @narodstream552
      @narodstream552  8 років тому

      MEMS - это микроэлектронные механические системы. Технология так сказать. По этой технологии выполнены все датчики, которые мы рассматриваем, начиная с самого первого акселерометра.

    • @GreenDer77
      @GreenDer77 4 роки тому

      HAL_UART_Transmit (&huart1,&count,1,0xFFFF); count переменная.

  • @dottore9637
    @dottore9637 5 років тому

    Ждем урок по передаче и приеме uart-rs485 по Modbus RTU (slave-master).

    • @narodstream552
      @narodstream552  5 років тому

      По Modbus уроки как правило бывают в специализированных ВУЗах, там для этого есть оборудование, у меня такого нет. Передачей с контроллера на контроллер по 485-му интерфейсу я занимался, также через переходник с ПК с установкой на последнем виртуальных промышленных устройств - тоже. Это всё не то. Только наличие реального промышленного устройства обуславливает качественные уроки.

  • @denysnikolaevich511
    @denysnikolaevich511 8 років тому

    Здравствуйте , подскажите , а как передавать если размер буфера не известен(не больше 64 байт) и в конце необходимо добавить

    . Если можно с примером

    • @narodstream552
      @narodstream552  8 років тому

      Здравствуйте!
      sprintf(str,"Бла_бла_бла
      ");
      HAL_UART_Transmit(&huart2, str, strlen(str), 0xFFFF);

    • @denysnikolaevich511
      @denysnikolaevich511 8 років тому

      Не совсем то .Я считываю данные с USB ( VCP)
      ================================
      static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
      memcpy (user_data, Buf, *Len);
      USBD_CDC_ReceivePacket(&hUsbDeviceFS);
      return (USBD_OK);
      ================================
      Принял теперь передать нужно в юарт
      HAL_UART_Transmit_IT (&huart3, user_data,8);
      ================================
      Передаются но !!! допустим первый раз получили 8 бит отправили пришло все правильно второй раз отправили 4 байта принимаем первых 4 то что отправили , а остальные те что с прошлого раза остались . пробую очистить буфер *user_data = '\0'; но не помогает

    • @denysnikolaevich511
      @denysnikolaevich511 8 років тому

      Можно почту вашу ? или мне напишите motor2036"собака"ya.ru

    • @narodstream552
      @narodstream552  8 років тому

      Denys Nikolaevich То же самое

    • @narodstream552
      @narodstream552  8 років тому

      sprintf(str_tx,"USB Transmit
      ");
      CDC_Transmit_FS((uint8_t*)str_tx, strlen(str_tx));

  • @ГеоргийОрлов-г5в
    @ГеоргийОрлов-г5в 6 років тому

    Подскажите пожалуйста, функция HAL_UART_Transmit передает только один байт (255) , а если я хочу передать длинное число (миллион), как мне действовать?
    Разбить число на разряды и впихнуть каждый разряд в элемент массива, и потом каждую цифру передавать как ascii-символ? И на ответной части собрать обратно?

    • @narodstream552
      @narodstream552  6 років тому

      Функция HAL_UART_Transmit передаёт не один байт, а сколь угодно. Мы ей показываем место в памяти, где лежат данные, а в следующем аргументе - количество байтов.
      А если Вы хотите передать например 32-битное число, то положите его по этому адресу и передайте 4 байта. А на той стороне также примите 4 байта в память и затем заберите оттуда число. Мы постоянно так делаем, например, передавая количество системных квантов с клиента серверу в последних уроках.

    • @ГеоргийОрлов-г5в
      @ГеоргийОрлов-г5в 6 років тому

      Ну вот я хочу передать двухбайтное число X = 4500 (сигнал с ацп). Пишу:
      uint16_t X;
      HAL_UART_Transmit(&huart3, &X, 2, 0xFFFF);
      Кейл выдает ошибку, мол, мне нужно 8 бит, а мне дают 16. Что ему не нравится? Я же ему указал, что будет передаваться два байта. Может как-то по другому надо записать?

    • @narodstream552
      @narodstream552  6 років тому

      явное преобразование надо конечно.
      Преобразовываем указатель:
      (void *) &syscnt
      HAL_UART_Transmit(&huart3,(uint8_t*) &X, 2, 0xFFFF);
      Это же элементарный СИ.
      Позанимайтесь немного языком.
      Принимаем на другой стороне аналогично. Я выше писал как.

    • @ГеоргийОрлов-г5в
      @ГеоргийОрлов-г5в 6 років тому

      Спасибо большущее! Преобразовал указатель, наконец-то ошибок нет и мк начал передавать!
      Но только передается почему-то задом наперед. Передаю число 4500 (hex1194), а терминал принимает 9411 (dec 37905).
      Можно ли в программе или в CubeMX настроить, чтобы мк сперва передавал старшие байты, а потом младшие?

    • @narodstream552
      @narodstream552  6 років тому

      Пожалуйста!
      Это правильная передача. Передаётся именно так, как располагается в памяти. Сначала идут младшие биты, а потом старшие (little endian). И проектогенератор тут не при чём. Не надо ничего настраивать. Зачем Вам нужно, чтобы шли сначала старшие (big endian)? Вы принимаете какой программой? Сами писали?

  • @Jdivanchik
    @Jdivanchik 8 років тому

    Довольно грамотный подход к урокам! Но в сл. раз лучше не вылезать за рамки темы ) Если урок про HAL USART и передачу данных, то нет смысла рассказывать про железки )

    • @narodstream552
      @narodstream552  8 років тому

      Спасибо за поправки, Я учту, конечно. Но просто порой бывают случаи такие, что не рассказать про железки нельзя. Т.к. USART интерфейс находится тоже в контроллере, в железе и в переходнике. Тут железки надо соединять. Но, тем не менее спасибо за комментарий. Я обязательно пересмотрю данное видео и, может быть, найду тут что то постороннее. Ну, его-то я править уже не могу, но в будущем учту.

    • @Kaagwaan
      @Kaagwaan 2 роки тому

      @@narodstream552 а зачем нужен дополнительный переходник FT232RL, если плата и так прекрасно соединяется с ПК через встроенные ST-Link и USB-разъем? Передача и прием через UART тоже нормально работают по этому каналу связи.

  • @AAAAAA-lt9mi
    @AAAAAA-lt9mi 5 років тому

    Всем привет!
    У меня не понятная ситуация. Отправляю один символ "M", на компьютере отображается "Y". В общем отправляю конкретные символы, приходят совсем другие.
    Кто-нибудь сможет помочь?

    • @AAAAAA-lt9mi
      @AAAAAA-lt9mi 5 років тому

      В общем решился вопрос. Проблема была в китайском usb-comport.

  • @caohung5363
    @caohung5363 7 років тому

    Hi! You used to work module GPS traker with STM32 // I'm try to connect with it
    You can help me :)