STM32 UART IDLE LINE interrupt. Прием данных по UART не зная размера данных, используем IDLE

  Рет қаралды 5,729

Arduino Kit

Arduino Kit

3 жыл бұрын

#STM32 #UART #IDLE
STM32 UART IDLE LINE interrupt. Прием данных по UART не зная размера данных, используем IDLE.
В данном видео я покажу как на микроконтроллерах STM32 принимать данные по UART не зная сколько байт придет, используя прерывание IDLE и DMA.
( Онлайн уроки по STM32 )

Пікірлер: 33
@user-rq6rx5cp7i
@user-rq6rx5cp7i 8 ай бұрын
Пожалуй, самое простое и бытовое объяснение работы с uart на stm... Спасибо!
@user-oy2re3uh5o
@user-oy2re3uh5o 3 жыл бұрын
Спасибо, очень полезно
@user-dk4vr3fp3s
@user-dk4vr3fp3s 2 жыл бұрын
Хорошо объясняете, лайк, подписка!
@jordanpales3503
@jordanpales3503 2 жыл бұрын
Спасибо, очень полезно! С меня лайк и подписка!
@smart_electronics_il
@smart_electronics_il Жыл бұрын
Вопрос, а через сколько по времени после последнего байта, поднимается idle ?
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео? зарание спасибо.....
@olek8267
@olek8267 Жыл бұрын
Дякую. Нічого зайвого.
@Fixaj
@Fixaj Жыл бұрын
Teşekkürler
@masterkit9517
@masterkit9517 3 жыл бұрын
stm32 подоожал в 10 раз)
@Arduino_Kit
@Arduino_Kit 3 жыл бұрын
Все МК подорожали, да 103 больше всех так как самый ходовой.
@ko062vvs
@ko062vvs 2 жыл бұрын
А если без DMA? второй пакет данных, если другого размера, size сохраняет количество принятых байт предыдущего. Почему так? если я послал например 8 байт size стало 8. после послал 4 size стал 4. а потом опять 8 size остался все-ровно 4.
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео?
@BarVados
@BarVados Жыл бұрын
Из-за чего в буфер ни чего не записывается, но при этом срабатывает прерывание и ReceiveType == HAL_UART_RECEPTION_STANDARD ?
@olegiv4814
@olegiv4814 Жыл бұрын
Существенная не точность, - если HAL_UART_RxCpltCallback вызывается один раз, это не значит, что прерывание по UART тоже будет один раз (это видно по коду HAL) Несколько другая ситуации с DMA , однако если необходимо вызвать прерывание только один раз, нужно либо править HAL, либо делать все вручную (лучше с использованием LL)
@edmelectronics4110
@edmelectronics4110 2 жыл бұрын
Да, ето самой простой и иновативный метод прием данни не зная их размер. У меня есть такое пожелание: Как передавать и приемать данни по УАРТ, каторые представляют обичние переменны, например от размер uint32_t. Все примери которые я встречал были основно с передача и приема символные байти для монитора. Интерес представляет обмен данны между двумя микроконтролера по УАРТ на обичные переменный, несимволные - int, float, doble и т.д. Спасибо.
@AlekseiVOne
@AlekseiVOne 2 жыл бұрын
Передаются как строки, а потом на приемном устройстве сделать преобразование из строки в необходимые типы данных функцией atoi . Как вариант
@sergbo3114
@sergbo3114 4 ай бұрын
Я тут почитал, есть некоторые сообщения о проблемах с ДМА. Так вот убедитесь в следующем. В STM32F4 есть особенность. Внимательно смотрите где выделяется буфер который вы передаете в функцию. ДМА не умеет работать с CCM памятью. Кто не в курсе у данного чипа память разделена на 2 региона адреса 0х1000000 и 0х2000000. И вот первая это CCM. Если вы передадите такой адрес то ничего хорошего не получится. Что касается других контроллеров курите мануалы серы.
@user-vl8rx6os8u
@user-vl8rx6os8u 2 жыл бұрын
Спасибо автору за видео! У меня изначально возник вопрос: почему прерывание по IDLE не срабатывает сразу же, ведь линия изначально после старта UART находится в состоянии IDLE? В итоге сам нашёл ответ: прерывание срабатывает только если принят хотя бы 1 байт. В моём случае в файле stm32g4xx_hal_uart.c в обработчике прерывания HAL_UART_IRQHandler в строке 2402 значится следующее: /* DMA mode enabled */ /* Check received length : If all expected data are received, do nothing, (DMA cplt callback will be called). Otherwise, if at least one data has already been received, IDLE event is to be notified to user */ uint16_t nb_remaining_rx_data = (uint16_t) __HAL_DMA_GET_COUNTER(huart->hdmarx); if ((nb_remaining_rx_data > 0U) && (nb_remaining_rx_data < huart->RxXferSize)) { и только после этих проверок программа честно попадает в HAL_UARTEx_RxEventCallback.
@izmitelektronik
@izmitelektronik Жыл бұрын
Как с вами связаться? Есть деловой предложение.
@tiger0007t
@tiger0007t 5 ай бұрын
не получилось у меня с dma
@AlekseiVOne
@AlekseiVOne 2 жыл бұрын
Подскажите пожалуйста, запрограммировал по вашему примеру плату. Только у меня на UART1 сидит GPS модем, UART2 это данные в порт компа. И ловлю дефект, связанный с тем, что если я сделаю так: выключу питание, отсоединю GPS, включу плату, включу терминал и открою порт на ПК, подсоединю GPS модем то у меня все прекрасно работает. Но если GPS модем сидит на линии, когда подается питание на плату то никаких данных по UART1 не передается. Подскажите пожалуйста, в чем может быть причина?
@user-dk4vr3fp3s
@user-dk4vr3fp3s 2 жыл бұрын
Может какой-то мусор отправляется при включении? В идеале мне кажется померить что на линиях уарт1 в момент подачи питания. Как успехи разобрались?
@user-jn7vh7be1z
@user-jn7vh7be1z 2 жыл бұрын
Не работает блин по DMA. До этого всё огонь, попадает в калбек. Как ттолько IT меняю на DMA всё - тишина, даже буфер не наполняется. Кто знает что делаю не так?
@alexandrkstudy
@alexandrkstudy 2 жыл бұрын
Поменяй местами инициализацию UASART и DMA. Инициализация UASART должна быть первой. Увидел в сети чей-то комментарий и мне это также помогло, видимо дело в HAL (работал в STM32CubeIDE 1.9 /mcu STM32L476RG)
@user-vl8rx6os8u
@user-vl8rx6os8u 2 жыл бұрын
У меня была того же рода проблема - в дебаге выяснил, что после запуска юарта с ДМА в режиме ожидания IDLE (HAL_UARTEx_ReceiveToIdle_DMA), срабатывает прерывание ЮАРТа по переполнению (OVERRUN), и обработчик запрещает дальнейшие прерывания по событию IDLE, очищая бит USART_CR1_IDLEIE. В итоге решил вопрос принудительным очищением флага UART_CLEAR_OREF перед запуском функции. Возможно это происходило из-за того, что до запуска ЮАРТа с ДМА в режиме ожидания IDLE (HAL_UARTEx_ReceiveToIdle_DMA), запускал ЮАРТ в блокирующем режиме HAL_UART_Receive.
@sergbo3114
@sergbo3114 4 ай бұрын
Еще дополню. В STM32F4 есть особенность. Внимательно смотрите где выделяется буфер который вы передаете в функцию. ДМА не умеет работать с CCM памятью. Кто не в курсе у данного чипа память разделена на 2 региона адреса 0х1000000 и 0х2000000. И вот первая это CCM. Если вы передадите такой адрес то ничего хорошего не получится.
@alfiz9943
@alfiz9943 Жыл бұрын
а чо так можно было ?!
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео? зарание спасибо.....
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео? зарание спасибо.....
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео? зарание спасибо.....
@qoblanqoblan9379
@qoblanqoblan9379 Жыл бұрын
здравствуйте. мне очень понравилось ваш видео курс. Вы ещё подготовить видео такое, uart1 принимает данные и ему шифрует с алгоритма гост или аеs и передаеть через uart2.. можете готовить видео? зарание спасибо.....
哈莉奎因以为小丑不爱她了#joker #cosplay #Harriet Quinn
00:22
佐助与鸣人
Рет қаралды 9 МЛН
Smart Sigma Kid #funny #sigma #memes
00:26
CRAZY GREAPA
Рет қаралды 8 МЛН
Library for Timer PWM  STM H7
3:55
AVR_STM_PRO
Рет қаралды 100
UART Прервание на прием байта
4:13
DIY channel
Рет қаралды 1,5 М.
Датчик температуры LM75A  LM75 sensor  STM32
31:39
Arduino Kit
Рет қаралды 1,6 М.
Samsung laughing on iPhone #techbyakram
0:12
Tech by Akram
Рет қаралды 7 МЛН
Какой ноутбук взять для учёбы? #msi #rtx4090 #laptop #юмор #игровой #apple #shorts
0:18
Проверил, как вам?
0:58
Коннор
Рет қаралды 413 М.
Rate This Smartphone Cooler Set-up ⭐
0:10
Shakeuptech
Рет қаралды 7 МЛН