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

 
 
> STM32 UART RTS/CTS Cube, Как "остановить" прием
eu1cc
сообщение Jul 8 2016, 10:31
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 24-10-10
Из: Minsk
Пользователь №: 60 382



День добрый всем.
STM32F103, используется UART2. Прием идет в прерывании. Линии rts/cts используются. При поступлении данных, заполняется буфер (64 байта), после этого выставляется флаг, и в основоной программе выполняется анализ буфера.
Как на это время остановить прием? Запретить прерывание от UART?, или есть какое-то другое, более красивое решение?
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Obam
сообщение Jul 8 2016, 10:57
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Если используете аппаратное управление потоком (RTS/CTS), то неактивным уровнем CTS ведомый останавливает передачу от ведущего и прерывания по приёму просто не будет.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
eu1cc
сообщение Jul 8 2016, 11:02
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 24-10-10
Из: Minsk
Пользователь №: 60 382



т.е. надо не запрещать прерывание, а переводить CTS в "1"? А как это программно делается?
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jul 8 2016, 11:11
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



прерывание не нужно останавливать т.к. оно не произойдет (буфер полон, сигнал cts активен, передатчик должен это увидеть и прекратить передачу), но
прежде чем это произойдет, от уже успеет бросить приготовленные данные приемнику и решение кажется таким, что размер буфера должен быть равен или превышать размер переданного блока иначе потеря данных.
т.е. я хочу сказать что ваш буфер должен быть больше чем вы ожидаете принять на размер данных передаваемый за один раз иначе приемник не успеет сигнализировать cts
получается буфер заполнен- сигнал начать обработку данных и запретить копирование из фифо, очистили буфер продолжили копирование из фифо (если вы его используете, если нет то это регистр rdr)

Цитата(eu1cc @ Jul 8 2016, 11:02) *
т.е. надо не запрещать прерывание, а переводить CTS в "1"? А как это программно делается?

из даташита я понял, что cts по заполнению фифо ли rdr встает автоматом.

Сообщение отредактировал winniethepooh - Jul 8 2016, 12:31
Go to the top of the page
 
+Quote Post
rudy_b
сообщение Jul 8 2016, 13:34
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



После заполнения буфера просто переключите прием на второй буфер.
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jul 8 2016, 13:45
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(rudy_b @ Jul 8 2016, 13:34) *
После заполнения буфера просто переключите прием на второй буфер.

а дальше? типа поработали с данными в первом и дальше во второй и сколько буферов оптимально поддерживать?

Сообщение отредактировал winniethepooh - Jul 8 2016, 13:49
Go to the top of the page
 
+Quote Post
Obam
сообщение Jul 8 2016, 14:01
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Я частенько использую 3: в один принимается, второй в это время обрабатывается, из третьего - отправляется. И так автоматом по кругу.


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Jul 8 2016, 14:36
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Цитата(Obam @ Jul 8 2016, 14:01) *
Я частенько использую 3: в один принимается, второй в это время обрабатывается, из третьего - отправляется. И так автоматом по кругу.

накладненько
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 17:04
Рейтинг@Mail.ru


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