USART через DMA на STM32F042
Jan. 15th, 2017 10:10 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Добавил в коллекцию еще один сниппет.
Казалось бы, в USART через DMA ничего особенного нет, но по сравнению с STM32F103 у нулевой серии есть замечательное прерывание USART: "character match".
В этом примере DMA организует прием-передачу данных (причем на прием стоит двойная буферизция), а прерывание character match позволяет определить, было ли окончание строки. Если было, то выставляется соответствующий флаг и буфера меняются местами; если же не было, то при переполнении буфера DMA прием возобновляется в тот же буфер и выставляется флаг overflow.
Принятая строка возвращается обратно "задом наперед", а каждые ~5 секунд выводится еще и надпись "dummy text". Например, если написать
Казалось бы, в USART через DMA ничего особенного нет, но по сравнению с STM32F103 у нулевой серии есть замечательное прерывание USART: "character match".
В этом примере DMA организует прием-передачу данных (причем на прием стоит двойная буферизция), а прерывание character match позволяет определить, было ли окончание строки. Если было, то выставляется соответствующий флаг и буфера меняются местами; если же не было, то при переполнении буфера DMA прием возобновляется в тот же буфер и выставляется флаг overflow.
Принятая строка возвращается обратно "задом наперед", а каждые ~5 секунд выводится еще и надпись "dummy text". Например, если написать
Привет Аргентина манит негра 1234567на выходе получим:
тевирп dummy text арген тинам анитнегрА dummy text 7654321
no subject
Date: 2017-01-15 02:37 pm (UTC)no subject
Date: 2017-01-15 02:51 pm (UTC)no subject
Date: 2017-01-15 05:29 pm (UTC)no subject
Date: 2017-01-15 05:37 pm (UTC)no subject
Date: 2017-01-15 05:38 pm (UTC)no subject
Date: 2017-01-15 05:41 pm (UTC)no subject
Date: 2017-01-15 05:46 pm (UTC)no subject
Date: 2017-01-15 06:50 pm (UTC)no subject
Date: 2017-01-15 06:53 pm (UTC)no subject
Date: 2017-01-15 07:05 pm (UTC)> по тайм-ауту
Ты где-нибудь такую реализацию взаимодействия по USART видел? Покажи! Тот еще геморрой будет эти таймауты соблюдать...
В моей первой (еще на PICах) реализации СУ спектрографом со стороны ПК была функция ten_times_read. Угадай, зачем :)
no subject
Date: 2017-01-15 07:11 pm (UTC)no subject
Date: 2017-01-15 07:27 pm (UTC)no subject
Date: 2017-01-15 07:53 pm (UTC)1. Modbus RTU. См. MODBUS Message RTU Framing. Там указано 3.5 символа, после которых возникает тайм-аут.
2. ISO7816. См ГОСТ7816, часть 3. Там ужасный перевод ISO, но само ISO в открытом виде не распространяется. При блочном протоколе T=1 используется межсимвольный интервал, значение задается в начальных параметрах карты - ATR.
Промышленных протоколов поверх уарта, которые НЕ используются тайминги мне неизвестно.
no subject
Date: 2017-01-15 07:56 pm (UTC)no subject
Date: 2017-01-15 07:59 pm (UTC)no subject
Date: 2017-01-15 08:36 pm (UTC)no subject
Date: 2017-01-15 08:38 pm (UTC)no subject
Date: 2017-01-15 08:39 pm (UTC)no subject
Date: 2017-01-15 08:42 pm (UTC)no subject
Date: 2017-01-15 08:45 pm (UTC)no subject
Date: 2017-01-15 08:47 pm (UTC)Показал? Еще вопросы будут?