реклама на сайте
подробности

 
 
> STM32 UART DMA, как организовать прием по уму
Golikov A.
сообщение Jan 4 2015, 19:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

Собственно не успел я постебать коллег что сидят на STM процах без FIFO на UART. Как достался мне маленький хобби проект на STM32F3Discovery.
В этом проекте мне надо олапачивать несколько UART и крутить несколько ПИД регуляторов. Дергаться за каждым символом в прерывание не хочется, но и определить размер пачки символов нет возможности.

Хочется настроить DMA на прием данных из UART в какой-то буфер, но так чтобы оно качало данные куда-то а я их оттуда забирал время от времени. То есть если есть время забирал каждый байт, а нет пусть там немного накопиться вычитаю их в следующий проход. Есть такой режим ДМА в stm? Чтобы он по кругу какую-то область памяти писал, и всегда можно было понять до куда свежие данные?

Может кто уже делал такой велосипед?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rash
сообщение Jan 11 2015, 16:53
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Сделал такой велосипед: Завел DMA RX в циклическом режиме, по IDLE, выделил основной буфер например, например 1 кб, Он будет перезаписываться по кольцу (такая работа DMA). Выделил массив указателей, например 10 штук, которые будут указывать на адреса посылок в основном буфере. Когда срабатывает прерывание IDLE, я записываю адрес начала текущей посылки, которая находится в основном буфере. Таким образом возможно хранить несколько посылок различной длины в одном буфере, а в массиве хранить указатели на их адреса.

Недостаток такого метода является, что при чтении каждого байта посылки нужно проверять не вышел ли за границы основного буфера, т.к. он кольцевой.
Достоинство, что можно сохранить несколько посылок, если вдруг их не успеваешь обработать и не нужно включать, выключать DMA RX, DMA получается всегда включён.

Такое работает на F1 и F4, на др. сериях не пробовал.

Почему решился на такой велосипед, т.к. ловился на не приятном моменте, что дёргая выкл. DMA после принятия посылки
обработал, потом вкл. DMA, DMA не всегда включалось, бывало такое после суток работы например. Но на тот момент, я может не всё изучил и делал, что то не так. Но в таком способе можно работать и на запрос ответ и в асинхронном приёме/передаче данных.
Модбас протокол не использовал.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016