stm32f4 usart приём данных в прерывании и DMA

Кто любит RISC в жизни, заходим, не стесняемся.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение tonyk »

В цехах чаще всего встречал устройства с протоколами Modbus и DCON. Для обоих из них, используя полноценные UART, имеющие прерывания RTO и по символу, очень просто реализуется приём и передача с использованием DMA. Была экзотика в виде Bitbus. Сейчас стал встречаться CAN с самописными протоколами.

P.S. Прерывание IDLE, вообще-то говоря, предназначено для детектирования ошибок при обменен по протоколу Modbus. В кастрированных UART его используют вместо RTO за неимением последнего.
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение Dimon456 »

Eddy_Em, tonyk, DMA и прерывания RTO и по символу '\n', все это хорошо, но опять смотря какая конечная цель.
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
ввод строки из консоли с примитивным редактированием при помощи backspace
смотрим короткое видео
Спойлер
надеюсь достаточно показал
Реклама
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение Eddy_Em »

Dimon456, для консольного ввода отлично прерывания по символу работают, проверено. А вот если тайм-аут вставлять, понятное дело, работать будет неудобно. Но т.к. я обычно из терминала в режиме отладки (да и не только), прием у меня везде по прерыванию rxne. Заодно упрощается редактирование backspace'ом (правда, я себе на ncurses и readline терминал написал, там теперь не надо редактировать).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение tonyk »

Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
А в чём сложность? У меня в МК консольный ввод идёт через кольцевой буфер, поэтому хоть RTO, хоть IDLE, хоть RXNE, да хоть USB-CDC можно использовать. Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
Реклама
Эиком - электронные компоненты и радиодетали
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение Dimon456 »

tonyk писал(а):Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
ну так давайте посмотрим ваш алгоритм, как он вычитывается и обрабатывается.
Реклама
ivan dimir
Мучитель микросхем
Сообщения: 440
Зарегистрирован: Вс дек 29, 2019 08:05:21

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение ivan dimir »

Уважаемые профи и аматоры.Спасибо вам за помощь.
Реклама
Ex567
Родился
Сообщения: 4
Зарегистрирован: Сб мар 27, 2021 12:12:13
Откуда: Санкт-Петербург

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение Ex567 »

Здравствуйте, форумчане! Прошу совета в наиболее правильном варианте приема данных по uart на f103. Есть устройство, которое отправляет в stm пакеты данных частотой 10Гц, на скорости 115200кб/с. Мне нужен конкретный пакет объемом 100 байт с известным заголовком. Контроллер принимает данные используя прерывание и dma. Дальше мне нужно по заголовку пакета определить то ли это сообщение, которое я жду, и если да, то сравнить контрольную сумму и разложить данные в структуру. Здесь и возникает вопрос. В какой последовательности правильнее это делать? Пока вижу два варианта:
1. Принять весь пакет в буфер, сравнить заголовок, посчитать контрольную сумму и после этого разложить данные в структуру;
2. Принимать побайтно и сразу же сравнивать заголовок с шаблоном, а в случае успеха сразу раскладывать данные в структуру, после этого считать контрольную сумму.
Если есть более логичные способы, буду рад услышать. Делается все дилетантом в качестве хобби, так что завышенных требований не предъявляется.
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: stm32f4 usart приём данных в прерывании и DMA

Сообщение tonyk »

Вариант 1 предпочтительней. Тут ты принимаешь 100 байт через DMA, не нагружая проц.
Ответить

Вернуться в «ARM»