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

  Рет қаралды 27,922

narod stream

narod stream

Күн бұрын

Программирование на СИ в среде Keil μVision.
Пишем код под микроконтроллер STM32F407VG на плате STM32F4DISCOVERY.
Продолжаем работать с библиотекой HAL. Пробуем реализовать интерфейс USART (Универсальный синхронно-асинхронный приемо-передатчик)
В данном занятии пишем код для передачи данных от микроконтроллера к компьютеру через интерфейс USART.
Купить отладочную плату STM32F4-DISCOVERY можно здесь ali.pub/178fif
Переходник USB-TTL лучше купить такой (сейчас у меня именно такой и он мне больше нравится) ali.pub/yv3is
Навигация по видео:
00:00 Введение
00:22 Краткий обзор интерфейса USART и переходников USART-USB
07:17 Создаём проект и пишем код для реализации интерфейса USART на передачу данных
15:13 Смотрим результаты нашего труда
Рекомендуется также перед просмотром данного урока просмотреть данное видео:
УРОК 1. Установка Keil μVision • Программирование МК ST...
УРОК 4. Библиотека HAL. STM32 CUBE MX. Светодиоды и кнопка • Программирование МК ST...
Текстовая версия и исходный код здесь narodstream.ru/stm-urok-13-hal...
Группа в контакте club116656325
Группа в Одноклассниках ok.ru/group/52987126153436
Группа в Facebook / 236905359999556
Мой сайт "Программирование МК" narodstream.ru
Форум narodstream.ru/forum
Вы можете помочь проекту:
ЮMoney
yoomoney.ru/to/41001176473465
Webmoney
Z341906933112
Карта Сбербанка (МИР)
2202201799288929
Можно в USDT
1) Сеть:TRC20
Адрес: TBBPFk5Widf1CYvF7Xk5ssKXeiPJHwtMgS
2) Сеть: BSC BNB Smart Chain (BEP20) (комиссия намного меньше)
Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17
3) Сеть: Huobi ECO Chain (HECO) (комиссия еще меньше)
Адрес: 0x2e38754DF1e54649Bf0D5CD6fD6D8c96a9f22f17

Пікірлер: 73
@user-yv5ot9qq1j
@user-yv5ot9qq1j 6 жыл бұрын
Ура! Я отправил первое слово по UARTу. Это как в первый раз сказать МАМА!!! Спасибо!!!
@alexandrponomarenko4127
@alexandrponomarenko4127 3 жыл бұрын
Надеюсь, что не великое Русское слово отправил?))))
@DrargonsM
@DrargonsM 8 жыл бұрын
С нетерпением жду новых уроков! лайк"
@pashka-cherepashka
@pashka-cherepashka 7 жыл бұрын
Огромное спасибо за урок!!
@narodstream552
@narodstream552 7 жыл бұрын
И Вам спасибо за оценку!
@Maksim_Inozemtsev_HD
@Maksim_Inozemtsev_HD 6 жыл бұрын
Вы крутой) очень здорово, огромное спасибо)
@BR549DBH
@BR549DBH 7 жыл бұрын
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 7 жыл бұрын
I am very happy that you liked my lessons!
@user-vc1tm6hm9w
@user-vc1tm6hm9w 7 жыл бұрын
Всё заработало на STM32F103C8T6. Спасибо.
@narodstream552
@narodstream552 7 жыл бұрын
Я рад, что помог Вам.
@street_chronicles
@street_chronicles 8 жыл бұрын
Отличные видео! Так держать! Побольше подписчиков и новых видео!
@narodstream552
@narodstream552 8 жыл бұрын
Спасибо!
@timelord1137
@timelord1137 4 жыл бұрын
Спасибо)
@user-br6gp7hc4l
@user-br6gp7hc4l 3 ай бұрын
Спасибо
@orazaliseitpenbetov6336
@orazaliseitpenbetov6336 5 жыл бұрын
Спасибо. Педагогический навыки есть. Приятный голос. Не раздражает. И не чавкаете )). Многие чавкает , очень не приятно и противно слушать.
@narodstream552
@narodstream552 5 жыл бұрын
Спасибо! Буду стараться. Это одно из давних видео, посмотрите последние, а вдруг я уже исправился.
@dmitriyfilatov8658
@dmitriyfilatov8658 4 жыл бұрын
Вместо ручного подсчета символов можно записать (sizeof str / sizeof str[0])
@Ljutik123
@Ljutik123 7 жыл бұрын
Замечательные видео. Хотелось бы урок про CAN увидеть
@narodstream552
@narodstream552 7 жыл бұрын
Ну да. Мне тоже хотелось. Но нигде не нашел. Опять всё придется делать самому.
@Helipro
@Helipro 5 жыл бұрын
Здравствуйте! на 14:23 вы упомнянули про примеры от HAL, скажите, пожалуйста,где их можно найти? ссылку если можно
@feodor17sumkin
@feodor17sumkin 5 жыл бұрын
Владимир, а можно еще узнать. А частоту под USART выставлять нужно? У меня на него идет 54 Мгц, многовато наверное, мне больше 9600 мб/с не нужно. Или он автоматически возьмет ту частоту, которая ему нужна, если в настройках написать 9600?
@Narcil18
@Narcil18 5 жыл бұрын
Спасибо за уроки! При попытках повторить проект на STM32F429 программа CubeMX к USART присваивает пины RX PA3, а TX к PA2. В результате почему то информация не передавалась. Помогло присвоение других пинов контроллера RX PD6, а TX PD5. Может у кого то есть мнения почему так могло получится?
@user-pz8ep2ws8e
@user-pz8ep2ws8e 6 жыл бұрын
Доброе время суток. Мучаюсь с уарт уже некоторое время. опыта немного. Мне надо принимать и отправлять байты. Сделано все халом. стандартные функции приема и передачи по прерыванию. созданы буфера на прием и передачу. Общение между 2мя stm32f030k6 линии связи развязаны оптикой 817. Скорость от 600 до 9600. Работает. Если запускать одновременно.Но, стоит поиграться во время работы с питанием одного мк, или передергивать одну из линий связи, один из процов уходит в хард фаулт. а мне бы не хотелось чтоб проц прерывал работу в случае сбоя. Причем один и тот же код работы уарта ведет себя по разному при добавлении его в разные проекты. Как можно исправить. И возможно ли пообщатсья с вами чтоб решить этот вопрос?
@AVRshik
@AVRshik 6 жыл бұрын
В случае если примерно каждое пятое сообщение проскакивает в духе "USART Tran®+‹5USA*ўЙ…№smit" грешить надо на погрешность внешнего кварца? P.S. Сообщение в кавычках не редактировал, такое выдал терминал))
@Ljutik123
@Ljutik123 7 жыл бұрын
Кстати еще. Вероятно, есть готовая библиотека по MODBUS. Было бы очень полезно узнать.
@narodstream552
@narodstream552 7 жыл бұрын
Есть такая библиотека, причем бесплатная, но мне не понравилась.
@user-fd7fj4ii8g
@user-fd7fj4ii8g 3 жыл бұрын
Как корректно восстановить связь после обрыва линии ?
@vad741
@vad741 3 жыл бұрын
Чуть не по теме. Кто то пробовал использовать встроенный в STM32 вычислитель CRC для вычисления 16 битной суммы? Есть примеры? А то кругом только CRC32.
@dottore9637
@dottore9637 5 жыл бұрын
Ждем урок по передаче и приеме uart-rs485 по Modbus RTU (slave-master).
@narodstream552
@narodstream552 5 жыл бұрын
По Modbus уроки как правило бывают в специализированных ВУЗах, там для этого есть оборудование, у меня такого нет. Передачей с контроллера на контроллер по 485-му интерфейсу я занимался, также через переходник с ПК с установкой на последнем виртуальных промышленных устройств - тоже. Это всё не то. Только наличие реального промышленного устройства обуславливает качественные уроки.
@user-bl3yb6wx1z
@user-bl3yb6wx1z Жыл бұрын
Подскажите, а как работать с RS485 ?
@feodor17sumkin
@feodor17sumkin 5 жыл бұрын
Можно еще детский вопрос )) Переходникам нужны драйверы, или они просто втыкаются в свободный USB и тут же появляется виртуальный com порт.
@mykhailomorhal2181
@mykhailomorhal2181 5 жыл бұрын
Деколи треба, а деколи і ні. В Менеджері пристроїв зразу буде видно ваш пристрій. Якщо буде написано що невідомий пристрій то треба вигуглити драйвер
@feodor17sumkin
@feodor17sumkin 5 жыл бұрын
Владимир, можно узнать про переходники на 3:41 Я вот что опасаюсь. У STM входы 3-вольтовые, а эти платы питаются от USB, и скорей всего они 5 вольтовые. Они не сжигают порты? Я конечно слышал, что порты у STM толерантны к 5 вольтам, но может для подстраховки поставить какой-нибудь согласователь уровней? Померьте напряжение на выходах этих модулей. Заранее спасибо!
@narodstream552
@narodstream552 5 жыл бұрын
У меня пока ничего не сгорело. И согласователей никаких не ставил. Последнее время пользуюсь красными FTDI.
@feodor17sumkin
@feodor17sumkin 5 жыл бұрын
Ну может микроконтроллер работает на грани и на последнем издыхании? Пока новый - может и тянет кое-как, а состарится и откажет в самый ответственный момент.
@Jdivanchik
@Jdivanchik 8 жыл бұрын
Довольно грамотный подход к урокам! Но в сл. раз лучше не вылезать за рамки темы ) Если урок про HAL USART и передачу данных, то нет смысла рассказывать про железки )
@narodstream552
@narodstream552 8 жыл бұрын
Спасибо за поправки, Я учту, конечно. Но просто порой бывают случаи такие, что не рассказать про железки нельзя. Т.к. USART интерфейс находится тоже в контроллере, в железе и в переходнике. Тут железки надо соединять. Но, тем не менее спасибо за комментарий. Я обязательно пересмотрю данное видео и, может быть, найду тут что то постороннее. Ну, его-то я править уже не могу, но в будущем учту.
@Kaagwaan
@Kaagwaan Жыл бұрын
@@narodstream552 а зачем нужен дополнительный переходник FT232RL, если плата и так прекрасно соединяется с ПК через встроенные ST-Link и USB-разъем? Передача и прием через UART тоже нормально работают по этому каналу связи.
@user-ge3oi5kp7f
@user-ge3oi5kp7f 4 жыл бұрын
Usart1 только у меня не работает ? И почему вы используете usart2 ???
@Vargaftik
@Vargaftik 4 жыл бұрын
На STM32F4 Discovery (STM32F407VGT) у меня тоже не работал первый USART, вместо слов передавал . А второй работает как надо
@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));
@Helipro
@Helipro 7 жыл бұрын
Здравствуйте! Скажите, пожалуйста, как передавать число? Например если я хочу передать счетчик таймера
@narodstream552
@narodstream552 7 жыл бұрын
Здравствуйте! Я так думаю, что Вы хотите передать какое-то число именно через шину USART. Как вариант уложить его в буфер побайтно передать. Такая практика широко используется в моих уроках по датчикам MEMS, когда мы передаем 16-битные показания в шину USART и USB. Так что советую посмотреть и, я думаю, всё станет предельно понятно.
@Helipro
@Helipro 7 жыл бұрын
Да, все верно, хочу передать число по USART. Искал MEMS в ваших уроках, такого слова в названиях не нашел. Скажите, пожалуйста, как называется урок? обязательно посмотрю
@narodstream552
@narodstream552 7 жыл бұрын
MEMS - это микроэлектронные механические системы. Технология так сказать. По этой технологии выполнены все датчики, которые мы рассматриваем, начиная с самого первого акселерометра.
@GreenDer77
@GreenDer77 4 жыл бұрын
HAL_UART_Transmit (&huart1,&count,1,0xFFFF); count переменная.
@AAAAAA-lt9mi
@AAAAAA-lt9mi 5 жыл бұрын
Всем привет! У меня не понятная ситуация. Отправляю один символ "M", на компьютере отображается "Y". В общем отправляю конкретные символы, приходят совсем другие. Кто-нибудь сможет помочь?
@AAAAAA-lt9mi
@AAAAAA-lt9mi 5 жыл бұрын
В общем решился вопрос. Проблема была в китайском usb-comport.
@user-yo6no3jk9l
@user-yo6no3jk9l 5 жыл бұрын
Подскажите пожалуйста, функция HAL_UART_Transmit передает только один байт (255) , а если я хочу передать длинное число (миллион), как мне действовать? Разбить число на разряды и впихнуть каждый разряд в элемент массива, и потом каждую цифру передавать как ascii-символ? И на ответной части собрать обратно?
@narodstream552
@narodstream552 5 жыл бұрын
Функция HAL_UART_Transmit передаёт не один байт, а сколь угодно. Мы ей показываем место в памяти, где лежат данные, а в следующем аргументе - количество байтов. А если Вы хотите передать например 32-битное число, то положите его по этому адресу и передайте 4 байта. А на той стороне также примите 4 байта в память и затем заберите оттуда число. Мы постоянно так делаем, например, передавая количество системных квантов с клиента серверу в последних уроках.
@user-yo6no3jk9l
@user-yo6no3jk9l 5 жыл бұрын
Ну вот я хочу передать двухбайтное число X = 4500 (сигнал с ацп). Пишу: uint16_t X; HAL_UART_Transmit(&huart3, &X, 2, 0xFFFF); Кейл выдает ошибку, мол, мне нужно 8 бит, а мне дают 16. Что ему не нравится? Я же ему указал, что будет передаваться два байта. Может как-то по другому надо записать?
@narodstream552
@narodstream552 5 жыл бұрын
явное преобразование надо конечно. Преобразовываем указатель: (void *) &syscnt HAL_UART_Transmit(&huart3,(uint8_t*) &X, 2, 0xFFFF); Это же элементарный СИ. Позанимайтесь немного языком. Принимаем на другой стороне аналогично. Я выше писал как.
@user-yo6no3jk9l
@user-yo6no3jk9l 5 жыл бұрын
Спасибо большущее! Преобразовал указатель, наконец-то ошибок нет и мк начал передавать! Но только передается почему-то задом наперед. Передаю число 4500 (hex1194), а терминал принимает 9411 (dec 37905). Можно ли в программе или в CubeMX настроить, чтобы мк сперва передавал старшие байты, а потом младшие?
@narodstream552
@narodstream552 5 жыл бұрын
Пожалуйста! Это правильная передача. Передаётся именно так, как располагается в памяти. Сначала идут младшие биты, а потом старшие (little endian). И проектогенератор тут не при чём. Не надо ничего настраивать. Зачем Вам нужно, чтобы шли сначала старшие (big endian)? Вы принимаете какой программой? Сами писали?
@caohung5363
@caohung5363 7 жыл бұрын
Hi! You used to work module GPS traker with STM32 // I'm try to connect with it You can help me :)
Nutella bro sis family Challenge 😋
00:31
Mr. Clabik
Рет қаралды 11 МЛН
Survival skills: A great idea with duct tape #survival #lifehacks #camping
00:27
MEGA BOXES ARE BACK!!!
08:53
Brawl Stars
Рет қаралды 35 МЛН
Лекция 16: USART
11:21
Sappise
Рет қаралды 8 М.
Radio control for 8 commands
1:20
Shuric_U
Рет қаралды 102
Дешёвая STM32 плата + Arduino IDE
7:11
Serhii Trush
Рет қаралды 158 М.
Уроки Arduino #1 - структура программы и типы данных
7:27
Заметки Ардуинщика
Рет қаралды 1,1 МЛН
YOTAPHONE 2 - СПУСТЯ 10 ЛЕТ
15:13
ЗЕ МАККЕРС
Рет қаралды 178 М.
Tag her 🤭💞 #miniphone #smartphone #iphone #samsung #fyp
0:11
Pockify™
Рет қаралды 22 МЛН
Хотела заскамить на Айфон!😱📱(@gertieinar)
0:21
Взрывная История
Рет қаралды 5 МЛН