Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 UART RTS/CTS Cube
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
eu1cc
День добрый всем.
STM32F103, используется UART2. Прием идет в прерывании. Линии rts/cts используются. При поступлении данных, заполняется буфер (64 байта), после этого выставляется флаг, и в основоной программе выполняется анализ буфера.
Как на это время остановить прием? Запретить прерывание от UART?, или есть какое-то другое, более красивое решение?
Спасибо!
Obam
Если используете аппаратное управление потоком (RTS/CTS), то неактивным уровнем CTS ведомый останавливает передачу от ведущего и прерывания по приёму просто не будет.
eu1cc
т.е. надо не запрещать прерывание, а переводить CTS в "1"? А как это программно делается?
winniethepooh
прерывание не нужно останавливать т.к. оно не произойдет (буфер полон, сигнал cts активен, передатчик должен это увидеть и прекратить передачу), но
прежде чем это произойдет, от уже успеет бросить приготовленные данные приемнику и решение кажется таким, что размер буфера должен быть равен или превышать размер переданного блока иначе потеря данных.
т.е. я хочу сказать что ваш буфер должен быть больше чем вы ожидаете принять на размер данных передаваемый за один раз иначе приемник не успеет сигнализировать cts
получается буфер заполнен- сигнал начать обработку данных и запретить копирование из фифо, очистили буфер продолжили копирование из фифо (если вы его используете, если нет то это регистр rdr)

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

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

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

накладненько
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.