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

 
 
> Теряются данные при считывании по UART, STM32F103RD
Atlantis-
сообщение Oct 23 2015, 10:02
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Здравствуйте!
Столкнулся с проблемой потери данных и не понимаю откуда ноги растут.
Суть такая: по таймеру с частотой 500 Гц я опрашиваю датчики. На одной шине UART расположены два датчика. То есть я отправляю команду, считываю данные (по DMA) с одного датчика, переключаю на другой датчик - считываю данные с него. Раньше у меня была передача по USB и я в прерывании, каждую 1 мс проверял, есть ли данные от датчиков, копировал в отдельный массив и передавал.
Сейчас мне надо перейти на UART и тот же самый алгоритм почему то дает непонятный сбой. Каждую 1 мс по UART присылаю команду "передать данные", в прерывании проверяю есть ли данные, перекопирую их в массив, в начало массива добавляю счетчик и кол-во данных. После запуска через несколько секунд возникает сбой - байт "кол-во данных" пропадает.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Atlantis-
сообщение Oct 27 2015, 15:36
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Кстати проблема появилась, когда стал передавать данные с двух датчиков. С одним датчиком проблем не было. Частота запроса данных - 1 кГц, всегда. Данные от датчика поступают раз в 2,25 мс. То есть получалось, что данные мне отправлялись примерно через раз. Два датчика соответственно передают данные в 2 раза чаще, но все равно реже чем раз за 1 мс. У меня получалось (смотрел пакеты на верхнем уровне), что как раз данные приходят через один - сначала от первого датчика, потом пакет от второго и т.д.

Тогда, чтобы убрать влияние датчиков, я стал передавать просто фиксированный массив из 19 байт.
BuffUART[2] показывает, от какого датчика пришли данные, поэтому я периодически меняю ее значение, чтобы один и тот же пакет данных на верхнем уровне интерпретировался как данные от первого или второго датчика.

Вот тут и получается непонятный фокус...
если делать такое условие, то все работает
Код
if (ToggleFlag ==1)
{
BuffUART[2] = 1;
ToggleFlag =0;
}
else
{
BuffUART[2] = 1;//если тут 2, то происходят сбои! если 1, то сбоев нет
ToggleFlag++;
}


а если написать там 2, то через какое то время происходит сбой - теряется BuffUART[1]...

Цитата(wangan @ Oct 27 2015, 18:20) *
А ты не рассматривал вариант что когда когда ты переключаешь 74HC126D на уарт пролазит байт нулевой, попробуй после каждого переключения очищать аппаратный буфер уарта.

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

Сообщений в этой теме
- Atlantis-   Теряются данные при считывании по UART   Oct 23 2015, 10:02
- - =GM=   Цитата(Atlantis- @ Oct 23 2015, 10:0...   Oct 23 2015, 10:17
|- - Atlantis-   Цитата(=GM= @ Oct 23 2015, 13:17) Вообще-...   Oct 23 2015, 11:32
- - r_dot   Цитата(Atlantis- @ Oct 23 2015, 13:0...   Oct 23 2015, 10:37
|- - Atlantis-   Цитата(r_dot @ Oct 23 2015, 13:37) ...   Oct 23 2015, 11:52
- - uriy   А вы уверены что микросхему 74HC126D переключаете ...   Oct 23 2015, 11:47
- - Atlantis-   Сделал на стороне STM32 постоянный массив, который...   Oct 24 2015, 13:34
|- - =GM=   Цитата(Atlantis- @ Oct 24 2015, 13:3...   Oct 26 2015, 10:14
|- - Atlantis-   Цитата(=GM= @ Oct 26 2015, 13:14) 1000/19...   Oct 26 2015, 20:07
- - esaulenka   Первый признак любимых граблей эмбеддера: слово ...   Oct 27 2015, 09:06
|- - Atlantis-   Цитата(esaulenka @ Oct 27 2015, 12:06) Пе...   Oct 27 2015, 10:56
- - esaulenka   Ничего не понял. Данные из датчиков попадают в два...   Oct 27 2015, 12:28
|- - Atlantis-   Цитата(esaulenka @ Oct 27 2015, 15:28) Ни...   Oct 27 2015, 13:28
- - psL   uart вообще может мусор с линии принимать, тем бол...   Oct 27 2015, 13:04
- - wangan   А ты не рассматривал вариант что когда когда ты пе...   Oct 27 2015, 15:20


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

 


RSS Текстовая версия Сейчас: 21st August 2025 - 05:15
Рейтинг@Mail.ru


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