eddy_em: (Костерок)
[personal profile] eddy_em
Добавил в коллекцию еще один сниппет.
Казалось бы, в USART через DMA ничего особенного нет, но по сравнению с STM32F103 у нулевой серии есть замечательное прерывание USART: "character match".
В этом примере DMA организует прием-передачу данных (причем на прием стоит двойная буферизция), а прерывание character match позволяет определить, было ли окончание строки. Если было, то выставляется соответствующий флаг и буфера меняются местами; если же не было, то при переполнении буфера DMA прием возобновляется в тот же буфер и выставляется флаг overflow.
Принятая строка возвращается обратно "задом наперед", а каждые ~5 секунд выводится еще и надпись "dummy text". Например, если написать
Привет
Аргентина манит негра
1234567
на выходе получим:
тевирп
dummy text
арген тинам анитнегрА
dummy text
7654321

Date: 2017-01-15 07:27 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Ты пример приведи нормальный рабочий. И не винапи, это ублюдство вообще постыдился бы в пример приводить!

Date: 2017-01-15 07:53 pm (UTC)
From: [identity profile] mbr.livejournal.com
Оба протокола поверх уарта с которыми я работаю постоянно, используют межсимвольный тайм-аут для определения границ фрейма.

1. Modbus RTU. См. MODBUS Message RTU Framing. Там указано 3.5 символа, после которых возникает тайм-аут.
2. ISO7816. См ГОСТ7816, часть 3. Там ужасный перевод ISO, но само ISO в открытом виде не распространяется. При блочном протоколе T=1 используется межсимвольный интервал, значение задается в начальных параметрах карты - ATR.

Промышленных протоколов поверх уарта, которые НЕ используются тайминги мне неизвестно.

Date: 2017-01-15 07:56 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Ты мне реальное что-нибудь покажи. Скажем, общение с GPS- или GSM-модулем с использованием таймаутов. Там же и задержки ненормированные, и длина строк. А у GPS еще и данные периодически сыплются помимо ответов на запросы...

Date: 2017-01-15 07:59 pm (UTC)
From: [identity profile] mbr.livejournal.com
Что значит реальное? Я тебе два промышленных стандарта привел. Тебе мало?

Date: 2017-01-15 08:36 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Для "промышленного стандарта" я бы CAN выбрал и не парился. А чтобы со всяким ширпотребом вроде GPS/GSM общаться, модбасы не подойдут!

Date: 2017-01-15 08:38 pm (UTC)
From: [identity profile] mbr.livejournal.com
Не увиливай. Мы про уарт говорим. Как сделать правильно и как сделать на отъебись.

Date: 2017-01-15 08:39 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Тогда и ты не увиливай. Покажи пример кода, работающего с GPS или GSM, где прием/передача по таймингам идет, а не разбором построчно.

Date: 2017-01-15 08:42 pm (UTC)
From: [identity profile] mbr.livejournal.com
Причем тут gsm и gps? Я что тебе за всех говнокодеров должен отвечать? Я тебе привел два промышленных стандарта, где идет разбор по таймингам. Или обмен с китайским gps стал промышленным стандартом?

Date: 2017-01-15 08:45 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
На кой черт мне твой модбас сдался? Если мне нужно будет что-то "промышленное" соединять, я как минимум CAN использую (а лучше не заморачиваться, и вообще ethernet), а USART — он как раз для связи со всякими китайскими ширпотребными модулями. Как, впрочем, и всякие I2C, SPI и им подобная шелуха.

Date: 2017-01-15 08:47 pm (UTC)
From: [identity profile] mbr.livejournal.com
> Ты где-нибудь такую реализацию взаимодействия по USART видел? Покажи!

Показал? Еще вопросы будут?

May 2025

S M T W T F S
    123
45678910
11121314151617
1819202122 2324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 23rd, 2025 09:09 pm
Powered by Dreamwidth Studios