Jump to content

    
Sign in to follow this  
Neo_Matrix

stm32f407 отслеживание логического нуля на UART

Recommended Posts

Привет. Может кто то сталкивался с возможностью отслеживать логический 0 на входе UART который длится более 100мс? В общем есть устройства третьей стороны, которое для отправки сигнала сброса использует притягивание линии UART в логический ноль на время близкое к 100мс. Каким образом можно это отследить? Разумеется что нормальное состояние линии логическая 1.

Share this post


Link to post
Share on other sites
42 минуты назад, Neo_Matrix сказал:

Каким образом можно это отследить? Разумеется что нормальное состояние линии логическая 1.

Что именно "отследить"? Измерить длительность удержания лог."0"? Например: подать на таймерный вход, запрограммированный в режиме захвата на захват по фронту сигнала.

Share this post


Link to post
Share on other sites
2 минуты назад, jcxz сказал:

Что именно "отследить"? Измерить длительность удержания лог."0"? Например: подать на таймерный вход, запрограммированный в режиме захвата на захват по фронту сигнала. 

А как на один и тот же пин таймер повесить и UART? Данные то ведь никто не отменял.

4 минуты назад, firstvald сказал:

USART_ISR_LBDF  флаг выставляется в прерывании при фиксации длинного 0 на линии. ну и можно просто руками опрашивать порт по чтению.

Спасибо сейчас посмотрю что за зверь.

Share this post


Link to post
Share on other sites
5 минут назад, Neo_Matrix сказал:

А как на один и тот же пин таймер повесить и UART? Данные то ведь никто не отменял.

Зачем "на один"? У вас ног в МК уже не хватает?

Цитата

Спасибо сейчас посмотрю что за зверь.

Можете не утруждаться - в обязанности UART-ов не входит измерение длительности сигналов на их ногах. Максимум что могут - выставить флаг ошибки если 0 держится более длительности слова. Ни о каких 100мсек даже речи идти не может.

Share this post


Link to post
Share on other sites

А LBD флаг нормально работает если порт сконфигурирован на UART, а не на LIN?

 

6 минут назад, jcxz сказал:

Зачем "на один"? У вас ног в МК уже не хватает?

Можете не утруждаться - в обязанности UART-ов не входит измерение длительности сигналов на их ногах. Максимум что могут - выставить флаг ошибки если 0 держится более длительности слова. Ни о каких 100мсек даже речи идти не может. 

Это уже проданный товар, нужно скорректировать прошивку под другое оборудование.

Я понимаю, что юарт не может измерять длительность, но допустим если использовать ЛИН БРЕЙК, как посоветовали выше, можно запустить таймер софтово и поллить ногу в течении следующих 99мс? Или так не выйдет? Наверное с регистра состояния ДЖПИО можно вычитать текущий уровень 1 или 0, по идее альтернативная функция пина не должна на это влиять.

Edited by Neo_Matrix

Share this post


Link to post
Share on other sites
14 минут назад, Neo_Matrix сказал:

Я понимаю, что юарт не может измерять длительность, но допустим если использовать ЛИН БРЕЙК, как посоветовали выше, можно запустить таймер софтово и поллить ногу в течении следующих 99мс? Или так не выйдет? По идее с регистра состояния ДЖПИО можно вычитать текущий уровень 1 или 0, по идее альтернативная функция пина не должна на это влиять.

Что значит "поллить"? Остановить всю работу и непрерывно в коротком цикле читать ногу ожидая фронта? Да, можно. Но девайс только этим и будет заниматься >= 100 мсек

А если будете опрашивать периодически, с каким-то интервалом, то где гарантия что между опросами не проскочит N-ое количество "1"?

А этот LBD, как я подозреваю, выставляет флаг когда длительность нуля превышает какое-то значение и после этого больше не отслеживает состояние линии. По-крайней мере в мануале не говорится ни о каком сигнале завершения этого состояния. А значит - не сможете по нему найти окончание длинного 0. Даже если он будет работать в режиме UART...

Share this post


Link to post
Share on other sites
25 минут назад, firstvald сказал:

USART_ISR_LBDF  флаг выставляется в прерывании при фиксации длинного 0

В любом УАРТе есть флаг ошибки фрейма, т.е. когда приходит старт(линия в 0) и вместо стопа на линии все тот же 0, проверять можно совместно с регистром данных, где тоже будет 0. Естественно, скорость передачи данных в линии меняться не должна.

Edited by mantech

Share this post


Link to post
Share on other sites
1 минуту назад, mantech сказал:

В любом УАРТе есть флаг ошибки фрейма, т.е. когда приходит старт(линия в 0) и вместо стопа на линии все тот же 0, проверять можно совместно с регистром данных, где тоже будет 0. Естественно, битрейт в линии должен быть постоянный.

Этот сигнал скажет ТСу только о начале длинного 0. И ничего не скажет о его конце. Как я уже говорил выше. И для продолжительного 0-я - он бесполезен.

Share this post


Link to post
Share on other sites
1 минуту назад, jcxz сказал:

И ничего не скажет о его конце.

Ну как же? А прерывание по приему символов с установленным флагом ошибки кадра до тех пор, пока на линии висит 0?

Share this post


Link to post
Share on other sites
2 минуты назад, Neo_Matrix сказал:

Полить имелось ввиду из обработчика прерывания таймера, который завести на 0.5 - 0.7 мс

Так можно сделать, если сразу после завершения длинного 0, всегда идёт пауза не менее этих самых 0.5-0.7 мс. А нормальные байты начинают идти только после этой паузы.

Share this post


Link to post
Share on other sites
4 минуты назад, mantech сказал:

Ну как же? А прерывание по приему символов с установленным флагом ошибки кадра до тех пор, пока на линии висит 0?

В тех UART, с которыми я имел дело, оно срабатывало 1 раз - когда счётчик битов достигал стоп-бита, и там оказывался 0. После этого ноль может стоять сколь угодно долго - ничего не генерится до следующего старта. А старт - это переход 1->0.

Что вполне соответствует алгоритму работы UART. А что может ещё генериться, если нового старт-условия нет, а значит - и нового слова данных нет.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this