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.
Владимир, а можно еще узнать. А частоту под USART выставлять нужно? У меня на него идет 54 Мгц, многовато наверное, мне больше 9600 мб/с не нужно. Или он автоматически возьмет ту частоту, которая ему нужна, если в настройках написать 9600?
В случае если примерно каждое пятое сообщение проскакивает в духе "USART Tran®+‹5USA*ўЙ…№smit" грешить надо на погрешность внешнего кварца? P.S. Сообщение в кавычках не редактировал, такое выдал терминал))
Доброе время суток. Мучаюсь с уарт уже некоторое время. опыта немного. Мне надо принимать и отправлять байты. Сделано все халом. стандартные функции приема и передачи по прерыванию. созданы буфера на прием и передачу. Общение между 2мя stm32f030k6 линии связи развязаны оптикой 817. Скорость от 600 до 9600. Работает. Если запускать одновременно.Но, стоит поиграться во время работы с питанием одного мк, или передергивать одну из линий связи, один из процов уходит в хард фаулт. а мне бы не хотелось чтоб проц прерывал работу в случае сбоя. Причем один и тот же код работы уарта ведет себя по разному при добавлении его в разные проекты. Как можно исправить. И возможно ли пообщатсья с вами чтоб решить этот вопрос?
Владимир, можно узнать про переходники на 3:41 Я вот что опасаюсь. У STM входы 3-вольтовые, а эти платы питаются от USB, и скорей всего они 5 вольтовые. Они не сжигают порты? Я конечно слышал, что порты у STM толерантны к 5 вольтам, но может для подстраховки поставить какой-нибудь согласователь уровней? Померьте напряжение на выходах этих модулей. Заранее спасибо!
Ну может микроконтроллер работает на грани и на последнем издыхании? Пока новый - может и тянет кое-как, а состарится и откажет в самый ответственный момент.
Спасибо за уроки! При попытках повторить проект на STM32F429 программа CubeMX к USART присваивает пины RX PA3, а TX к PA2. В результате почему то информация не передавалась. Помогло присвоение других пинов контроллера RX PD6, а TX PD5. Может у кого то есть мнения почему так могло получится?
Чуть не по теме. Кто то пробовал использовать встроенный в STM32 вычислитель CRC для вычисления 16 битной суммы? Есть примеры? А то кругом только CRC32.
Здравствуйте! Я так думаю, что Вы хотите передать какое-то число именно через шину USART. Как вариант уложить его в буфер побайтно передать. Такая практика широко используется в моих уроках по датчикам MEMS, когда мы передаем 16-битные показания в шину USART и USB. Так что советую посмотреть и, я думаю, всё станет предельно понятно.
Да, все верно, хочу передать число по USART. Искал MEMS в ваших уроках, такого слова в названиях не нашел. Скажите, пожалуйста, как называется урок? обязательно посмотрю
MEMS - это микроэлектронные механические системы. Технология так сказать. По этой технологии выполнены все датчики, которые мы рассматриваем, начиная с самого первого акселерометра.
По Modbus уроки как правило бывают в специализированных ВУЗах, там для этого есть оборудование, у меня такого нет. Передачей с контроллера на контроллер по 485-му интерфейсу я занимался, также через переходник с ПК с установкой на последнем виртуальных промышленных устройств - тоже. Это всё не то. Только наличие реального промышленного устройства обуславливает качественные уроки.
Не совсем то .Я считываю данные с 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'; но не помогает
Подскажите пожалуйста, функция HAL_UART_Transmit передает только один байт (255) , а если я хочу передать длинное число (миллион), как мне действовать? Разбить число на разряды и впихнуть каждый разряд в элемент массива, и потом каждую цифру передавать как ascii-символ? И на ответной части собрать обратно?
Функция HAL_UART_Transmit передаёт не один байт, а сколь угодно. Мы ей показываем место в памяти, где лежат данные, а в следующем аргументе - количество байтов. А если Вы хотите передать например 32-битное число, то положите его по этому адресу и передайте 4 байта. А на той стороне также примите 4 байта в память и затем заберите оттуда число. Мы постоянно так делаем, например, передавая количество системных квантов с клиента серверу в последних уроках.
Ну вот я хочу передать двухбайтное число X = 4500 (сигнал с ацп). Пишу: uint16_t X; HAL_UART_Transmit(&huart3, &X, 2, 0xFFFF); Кейл выдает ошибку, мол, мне нужно 8 бит, а мне дают 16. Что ему не нравится? Я же ему указал, что будет передаваться два байта. Может как-то по другому надо записать?
явное преобразование надо конечно. Преобразовываем указатель: (void *) &syscnt HAL_UART_Transmit(&huart3,(uint8_t*) &X, 2, 0xFFFF); Это же элементарный СИ. Позанимайтесь немного языком. Принимаем на другой стороне аналогично. Я выше писал как.
Спасибо большущее! Преобразовал указатель, наконец-то ошибок нет и мк начал передавать! Но только передается почему-то задом наперед. Передаю число 4500 (hex1194), а терминал принимает 9411 (dec 37905). Можно ли в программе или в CubeMX настроить, чтобы мк сперва передавал старшие байты, а потом младшие?
Пожалуйста! Это правильная передача. Передаётся именно так, как располагается в памяти. Сначала идут младшие биты, а потом старшие (little endian). И проектогенератор тут не при чём. Не надо ничего настраивать. Зачем Вам нужно, чтобы шли сначала старшие (big endian)? Вы принимаете какой программой? Сами писали?
Довольно грамотный подход к урокам! Но в сл. раз лучше не вылезать за рамки темы ) Если урок про HAL USART и передачу данных, то нет смысла рассказывать про железки )
Спасибо за поправки, Я учту, конечно. Но просто порой бывают случаи такие, что не рассказать про железки нельзя. Т.к. USART интерфейс находится тоже в контроллере, в железе и в переходнике. Тут железки надо соединять. Но, тем не менее спасибо за комментарий. Я обязательно пересмотрю данное видео и, может быть, найду тут что то постороннее. Ну, его-то я править уже не могу, но в будущем учту.
@@narodstream552 а зачем нужен дополнительный переходник FT232RL, если плата и так прекрасно соединяется с ПК через встроенные ST-Link и USB-разъем? Передача и прием через UART тоже нормально работают по этому каналу связи.
Всем привет! У меня не понятная ситуация. Отправляю один символ "M", на компьютере отображается "Y". В общем отправляю конкретные символы, приходят совсем другие. Кто-нибудь сможет помочь?
Ура! Я отправил первое слово по UARTу. Это как в первый раз сказать МАМА!!! Спасибо!!!
Надеюсь, что не великое Русское слово отправил?))))
Спасибо. Педагогический навыки есть. Приятный голос. Не раздражает. И не чавкаете )). Многие чавкает , очень не приятно и противно слушать.
Спасибо!
Буду стараться. Это одно из давних видео, посмотрите последние, а вдруг я уже исправился.
Всё заработало на STM32F103C8T6. Спасибо.
Я рад, что помог Вам.
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.
I am very happy that you liked my lessons!
С нетерпением жду новых уроков! лайк"
Здравствуйте! на 14:23 вы упомнянули про примеры от HAL, скажите, пожалуйста,где их можно найти? ссылку если можно
Отличные видео! Так держать! Побольше подписчиков и новых видео!
Спасибо!
Вы крутой) очень здорово, огромное спасибо)
Вместо ручного подсчета символов можно записать (sizeof str / sizeof str[0])
Огромное спасибо за урок!!
И Вам спасибо за оценку!
Владимир, а можно еще узнать. А частоту под USART выставлять нужно? У меня на него идет 54 Мгц, многовато наверное, мне больше 9600 мб/с не нужно. Или он автоматически возьмет ту частоту, которая ему нужна, если в настройках написать 9600?
Замечательные видео. Хотелось бы урок про CAN увидеть
Ну да. Мне тоже хотелось. Но нигде не нашел. Опять всё придется делать самому.
В случае если примерно каждое пятое сообщение проскакивает в духе "USART Tran®+‹5USA*ўЙ…№smit" грешить надо на погрешность внешнего кварца?
P.S. Сообщение в кавычках не редактировал, такое выдал терминал))
Подскажите,
а как работать с RS485 ?
Спасибо
Доброе время суток. Мучаюсь с уарт уже некоторое время. опыта немного. Мне надо принимать и отправлять байты. Сделано все халом. стандартные функции приема и передачи по прерыванию. созданы буфера на прием и передачу. Общение между 2мя stm32f030k6 линии связи развязаны оптикой 817. Скорость от 600 до 9600. Работает. Если запускать одновременно.Но, стоит поиграться во время работы с питанием одного мк, или передергивать одну из линий связи, один из процов уходит в хард фаулт. а мне бы не хотелось чтоб проц прерывал работу в случае сбоя. Причем один и тот же код работы уарта ведет себя по разному при добавлении его в разные проекты. Как можно исправить. И возможно ли пообщатсья с вами чтоб решить этот вопрос?
Владимир, можно узнать про переходники на 3:41
Я вот что опасаюсь. У STM входы 3-вольтовые, а эти платы питаются от USB, и скорей всего они 5 вольтовые. Они не сжигают порты?
Я конечно слышал, что порты у STM толерантны к 5 вольтам, но может для подстраховки поставить какой-нибудь согласователь уровней? Померьте напряжение на выходах этих модулей. Заранее спасибо!
У меня пока ничего не сгорело. И согласователей никаких не ставил. Последнее время пользуюсь красными FTDI.
Ну может микроконтроллер работает на грани и на последнем издыхании? Пока новый - может и тянет кое-как, а состарится и откажет в самый ответственный момент.
Спасибо)
Как корректно восстановить связь после обрыва линии ?
Usart1 только у меня не работает ?
И почему вы используете usart2 ???
На STM32F4 Discovery (STM32F407VGT) у меня тоже не работал первый USART, вместо слов передавал . А второй работает как надо
Спасибо за уроки!
При попытках повторить проект на STM32F429 программа CubeMX к USART присваивает пины RX PA3, а TX к PA2. В результате почему то информация не передавалась. Помогло присвоение других пинов контроллера RX PD6, а TX PD5. Может у кого то есть мнения почему так могло получится?
Можно еще детский вопрос )) Переходникам нужны драйверы, или они просто втыкаются в свободный USB и тут же появляется виртуальный com порт.
Деколи треба, а деколи і ні. В Менеджері пристроїв зразу буде видно ваш пристрій. Якщо буде написано що невідомий пристрій то треба вигуглити драйвер
Кстати еще. Вероятно, есть готовая библиотека по MODBUS. Было бы очень полезно узнать.
Есть такая библиотека, причем бесплатная, но мне не понравилась.
Чуть не по теме. Кто то пробовал использовать встроенный в STM32 вычислитель CRC для вычисления 16 битной суммы? Есть примеры? А то кругом только CRC32.
Здравствуйте! Скажите, пожалуйста, как передавать число? Например если я хочу передать счетчик таймера
Здравствуйте! Я так думаю, что Вы хотите передать какое-то число именно через шину USART. Как вариант уложить его в буфер побайтно передать. Такая практика широко используется в моих уроках по датчикам MEMS, когда мы передаем 16-битные показания в шину USART и USB. Так что советую посмотреть и, я думаю, всё станет предельно понятно.
Да, все верно, хочу передать число по USART.
Искал MEMS в ваших уроках, такого слова в названиях не нашел.
Скажите, пожалуйста, как называется урок? обязательно посмотрю
MEMS - это микроэлектронные механические системы. Технология так сказать. По этой технологии выполнены все датчики, которые мы рассматриваем, начиная с самого первого акселерометра.
HAL_UART_Transmit (&huart1,&count,1,0xFFFF); count переменная.
Ждем урок по передаче и приеме uart-rs485 по Modbus RTU (slave-master).
По Modbus уроки как правило бывают в специализированных ВУЗах, там для этого есть оборудование, у меня такого нет. Передачей с контроллера на контроллер по 485-му интерфейсу я занимался, также через переходник с ПК с установкой на последнем виртуальных промышленных устройств - тоже. Это всё не то. Только наличие реального промышленного устройства обуславливает качественные уроки.
Здравствуйте , подскажите , а как передавать если размер буфера не известен(не больше 64 байт) и в конце необходимо добавить
. Если можно с примером
Здравствуйте!
sprintf(str,"Бла_бла_бла
");
HAL_UART_Transmit(&huart2, str, strlen(str), 0xFFFF);
Не совсем то .Я считываю данные с 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'; но не помогает
Можно почту вашу ? или мне напишите motor2036"собака"ya.ru
Denys Nikolaevich То же самое
sprintf(str_tx,"USB Transmit
");
CDC_Transmit_FS((uint8_t*)str_tx, strlen(str_tx));
Подскажите пожалуйста, функция HAL_UART_Transmit передает только один байт (255) , а если я хочу передать длинное число (миллион), как мне действовать?
Разбить число на разряды и впихнуть каждый разряд в элемент массива, и потом каждую цифру передавать как ascii-символ? И на ответной части собрать обратно?
Функция HAL_UART_Transmit передаёт не один байт, а сколь угодно. Мы ей показываем место в памяти, где лежат данные, а в следующем аргументе - количество байтов.
А если Вы хотите передать например 32-битное число, то положите его по этому адресу и передайте 4 байта. А на той стороне также примите 4 байта в память и затем заберите оттуда число. Мы постоянно так делаем, например, передавая количество системных квантов с клиента серверу в последних уроках.
Ну вот я хочу передать двухбайтное число X = 4500 (сигнал с ацп). Пишу:
uint16_t X;
HAL_UART_Transmit(&huart3, &X, 2, 0xFFFF);
Кейл выдает ошибку, мол, мне нужно 8 бит, а мне дают 16. Что ему не нравится? Я же ему указал, что будет передаваться два байта. Может как-то по другому надо записать?
явное преобразование надо конечно.
Преобразовываем указатель:
(void *) &syscnt
HAL_UART_Transmit(&huart3,(uint8_t*) &X, 2, 0xFFFF);
Это же элементарный СИ.
Позанимайтесь немного языком.
Принимаем на другой стороне аналогично. Я выше писал как.
Спасибо большущее! Преобразовал указатель, наконец-то ошибок нет и мк начал передавать!
Но только передается почему-то задом наперед. Передаю число 4500 (hex1194), а терминал принимает 9411 (dec 37905).
Можно ли в программе или в CubeMX настроить, чтобы мк сперва передавал старшие байты, а потом младшие?
Пожалуйста!
Это правильная передача. Передаётся именно так, как располагается в памяти. Сначала идут младшие биты, а потом старшие (little endian). И проектогенератор тут не при чём. Не надо ничего настраивать. Зачем Вам нужно, чтобы шли сначала старшие (big endian)? Вы принимаете какой программой? Сами писали?
Довольно грамотный подход к урокам! Но в сл. раз лучше не вылезать за рамки темы ) Если урок про HAL USART и передачу данных, то нет смысла рассказывать про железки )
Спасибо за поправки, Я учту, конечно. Но просто порой бывают случаи такие, что не рассказать про железки нельзя. Т.к. USART интерфейс находится тоже в контроллере, в железе и в переходнике. Тут железки надо соединять. Но, тем не менее спасибо за комментарий. Я обязательно пересмотрю данное видео и, может быть, найду тут что то постороннее. Ну, его-то я править уже не могу, но в будущем учту.
@@narodstream552 а зачем нужен дополнительный переходник FT232RL, если плата и так прекрасно соединяется с ПК через встроенные ST-Link и USB-разъем? Передача и прием через UART тоже нормально работают по этому каналу связи.
Всем привет!
У меня не понятная ситуация. Отправляю один символ "M", на компьютере отображается "Y". В общем отправляю конкретные символы, приходят совсем другие.
Кто-нибудь сможет помочь?
В общем решился вопрос. Проблема была в китайском usb-comport.
Hi! You used to work module GPS traker with STM32 // I'm try to connect with it
You can help me :)