Кто любит RISC в жизни, заходим, не стесняемся.
Пн сен 13, 2021 07:09:46
В цехах чаще всего встречал устройства с протоколами Modbus и DCON. Для обоих из них, используя полноценные UART, имеющие прерывания RTO и по символу, очень просто реализуется приём и передача с использованием DMA. Была экзотика в виде Bitbus. Сейчас стал встречаться CAN с самописными протоколами.
P.S. Прерывание IDLE, вообще-то говоря, предназначено для детектирования ошибок при обменен по протоколу Modbus. В кастрированных UART его используют вместо RTO за неимением последнего.
Пн сен 13, 2021 08:28:44
Eddy_Em,
tonyk, DMA и прерывания RTO и по символу '\n', все это хорошо, но опять смотря какая конечная цель.
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
ввод строки из консоли с примитивным редактированием при помощи backspace
смотрим короткое видео
Пн сен 13, 2021 10:05:11
Dimon456, для консольного ввода отлично прерывания по символу работают, проверено. А вот если тайм-аут вставлять, понятное дело, работать будет неудобно. Но т.к. я обычно из терминала в режиме отладки (да и не только), прием у меня везде по прерыванию rxne. Заодно упрощается редактирование backspace'ом (правда, я себе на ncurses и readline терминал написал, там теперь не надо редактировать).
Пн сен 13, 2021 13:53:45
Если мы напрямую работаем через терминальную программу, то я бы хотел посмотреть как вы с прерыванием по символу '\n' организуете
А в чём сложность? У меня в МК консольный ввод идёт через кольцевой буфер, поэтому хоть RTO, хоть IDLE, хоть RXNE, да хоть USB-CDC можно использовать. Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
Пн сен 13, 2021 15:07:54
tonyk писал(а):Всё, что принято, помещается обработчиком прерывания в кольцевой буфер, а уже оттуда в задаче обработки консольного ввода вычитывается и обрабатывается.
ну так давайте посмотрим ваш алгоритм, как он вычитывается и обрабатывается.
Чт окт 07, 2021 20:51:55
Уважаемые профи и аматоры.Спасибо вам за помощь.
Пт окт 22, 2021 18:18:37
Здравствуйте, форумчане! Прошу совета в наиболее правильном варианте приема данных по uart на f103. Есть устройство, которое отправляет в stm пакеты данных частотой 10Гц, на скорости 115200кб/с. Мне нужен конкретный пакет объемом 100 байт с известным заголовком. Контроллер принимает данные используя прерывание и dma. Дальше мне нужно по заголовку пакета определить то ли это сообщение, которое я жду, и если да, то сравнить контрольную сумму и разложить данные в структуру. Здесь и возникает вопрос. В какой последовательности правильнее это делать? Пока вижу два варианта:
1. Принять весь пакет в буфер, сравнить заголовок, посчитать контрольную сумму и после этого разложить данные в структуру;
2. Принимать побайтно и сразу же сравнивать заголовок с шаблоном, а в случае успеха сразу раскладывать данные в структуру, после этого считать контрольную сумму.
Если есть более логичные способы, буду рад услышать. Делается все дилетантом в качестве хобби, так что завышенных требований не предъявляется.
Пт окт 22, 2021 20:21:46
Вариант 1 предпочтительней. Тут ты принимаешь 100 байт через DMA, не нагружая проц.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.