В цехах чаще всего встречал устройства с протоколами Modbus и DCON. Для обоих из них, используя полноценные UART, имеющие прерывания RTO и по символу, очень просто реализуется приём и передача с использованием DMA. Была экзотика в виде Bitbus. Сейчас стал встречаться CAN с самописными протоколами.
P.S. Прерывание IDLE, вообще-то говоря, предназначено для детектирования ошибок при обменен по протоколу Modbus. В кастрированных UART его используют вместо RTO за неимением последнего.
stm32f4 usart приём данных в прерывании и DMA
- Реклама
Re: stm32f4 usart приём данных в прерывании и DMA
Eddy_Em, tonyk, DMA и прерывания RTO и по символу '\n', все это хорошо, но опять смотря какая конечная цель.
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
надеюсь достаточно показал
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
смотрим короткое видеоввод строки из консоли с примитивным редактированием при помощи backspace
Спойлер
надеюсь достаточно показал
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: stm32f4 usart приём данных в прерывании и DMA
Dimon456, для консольного ввода отлично прерывания по символу работают, проверено. А вот если тайм-аут вставлять, понятное дело, работать будет неудобно. Но т.к. я обычно из терминала в режиме отладки (да и не только), прием у меня везде по прерыванию rxne. Заодно упрощается редактирование backspace'ом (правда, я себе на ncurses и readline терминал написал, там теперь не надо редактировать).
Re: stm32f4 usart приём данных в прерывании и DMA
А в чём сложность? У меня в МК консольный ввод идёт через кольцевой буфер, поэтому хоть RTO, хоть IDLE, хоть RXNE, да хоть USB-CDC можно использовать. Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
Re: stm32f4 usart приём данных в прерывании и DMA
ну так давайте посмотрим ваш алгоритм, как он вычитывается и обрабатывается.tonyk писал(а):Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
- Реклама
-
ivan dimir
- Мучитель микросхем
- Сообщения: 440
- Зарегистрирован: Вс дек 29, 2019 08:05:21
Re: stm32f4 usart приём данных в прерывании и DMA
Уважаемые профи и аматоры.Спасибо вам за помощь.
Re: stm32f4 usart приём данных в прерывании и DMA
Здравствуйте, форумчане! Прошу совета в наиболее правильном варианте приема данных по uart на f103. Есть устройство, которое отправляет в stm пакеты данных частотой 10Гц, на скорости 115200кб/с. Мне нужен конкретный пакет объемом 100 байт с известным заголовком. Контроллер принимает данные используя прерывание и dma. Дальше мне нужно по заголовку пакета определить то ли это сообщение, которое я жду, и если да, то сравнить контрольную сумму и разложить данные в структуру. Здесь и возникает вопрос. В какой последовательности правильнее это делать? Пока вижу два варианта:
1. Принять весь пакет в буфер, сравнить заголовок, посчитать контрольную сумму и после этого разложить данные в структуру;
2. Принимать побайтно и сразу же сравнивать заголовок с шаблоном, а в случае успеха сразу раскладывать данные в структуру, после этого считать контрольную сумму.
Если есть более логичные способы, буду рад услышать. Делается все дилетантом в качестве хобби, так что завышенных требований не предъявляется.
1. Принять весь пакет в буфер, сравнить заголовок, посчитать контрольную сумму и после этого разложить данные в структуру;
2. Принимать побайтно и сразу же сравнивать заголовок с шаблоном, а в случае успеха сразу раскладывать данные в структуру, после этого считать контрольную сумму.
Если есть более логичные способы, буду рад услышать. Делается все дилетантом в качестве хобби, так что завышенных требований не предъявляется.
Re: stm32f4 usart приём данных в прерывании и DMA
Вариант 1 предпочтительней. Тут ты принимаешь 100 байт через DMA, не нагружая проц.


