Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Пн сен 13, 2021 07:09:46

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

P.S. Прерывание IDLE, вообще-то говоря, предназначено для детектирования ошибок при обменен по протоколу Modbus. В кастрированных UART его используют вместо RTO за неимением последнего.

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

Пн сен 13, 2021 08:28:44

Eddy_Em, tonyk, DMA и прерывания RTO и по символу '\n', все это хорошо, но опять смотря какая конечная цель.
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
ввод строки из консоли с примитивным редактированием при помощи backspace
смотрим короткое видео

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

Пн сен 13, 2021 10:05:11

Dimon456, для консольного ввода отлично прерывания по символу работают, проверено. А вот если тайм-аут вставлять, понятное дело, работать будет неудобно. Но т.к. я обычно из терминала в режиме отладки (да и не только), прием у меня везде по прерыванию rxne. Заодно упрощается редактирование backspace'ом (правда, я себе на ncurses и readline терминал написал, там теперь не надо редактировать).

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

Пн сен 13, 2021 13:53:45

Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете

А в чём сложность? У меня в МК консольный ввод идёт через кольцевой буфер, поэтому хоть RTO, хоть IDLE, хоть RXNE, да хоть USB-CDC можно использовать. Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.

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

Пн сен 13, 2021 15:07:54

tonyk писал(а):Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
ну так давайте посмотрим ваш алгоритм, как он вычитывается и обрабатывается.

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

Чт окт 07, 2021 20:51:55

Уважаемые профи и аматоры.Спасибо вам за помощь.

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

Пт окт 22, 2021 18:18:37

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

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

Пт окт 22, 2021 20:21:46

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