Перейти к содержанию
    

Как прочитать состояние пина в STM32?

Добрый вечер. 

Это не совсем то, что вы подумали. Мне не нужно  читать состояние пина, настроенного на вход.

Есть код, который периодически подает единичку на один из настроенных на вывод пинов, допустим GPIOB, GPIO_PIN_13.

Код живет своей жизнью.

Но вот захотелось мне узнать, а включена ли эта ножка? Можно конечно в код, который включает ножку, добавить установку некоего флага и анализировать его. Но хочется сделать изящно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, -=Женек=- said:

Добрый вечер. 

Это не совсем то, что вы подумали. Мне не нужно  читать состояние пина, настроенного на вход.

Есть код, который периодически подает единичку на один из настроенных на вывод пинов, допустим GPIOB, GPIO_PIN_13.

Код живет своей жизнью.

Но вот захотелось мне узнать, а включена ли эта ножка? Можно конечно в код, который включает ножку, добавить установку некоего флага и анализировать его. Но хочется сделать изящно.

image.png.da0902216f9dba9c2385db338dd984b8.png

 

Ну, просто прочитать соответствующий вход

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, -=Женек=- said:

Но хочется сделать изящно.

Совсем одичали? :fool:

Просто читайте тот регистр, куда пишите состояние нужной ноги или целого порта. Читать можно когда угодно. "Изящнее" некуда ))

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну можно ещё EXTI настроить на оба фронта и по изменению пина влетать в прерывание

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 21.06.2019 в 21:53, Forger сказал:

Просто читайте тот регистр, куда пишите состояние нужной ноги или целого порта.

Нет, не тот регистр. Картинка выше показывает, какой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, ViKo said:

Нет, не тот регистр. Картинка выше показывает, какой.

Да, конечно, логичнее читать IDR, но оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью )

Если дрыгать пином через BSRR регистр, то читать все равно придется IDR или ODR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, Forger сказал:

Да, конечно, логичнее читать IDR, но оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью )

Не факт, можно записать в ODR  и успеть прочитать IDR до того когда данные реально в нём появятся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, VladislavS said:

Не факт, можно записать в ODR  и успеть прочитать IDR до того когда данные реально в нём появятся.

Что есть, то есть ))

 

Но задача изначально очень уже необычная :mda:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 минуты назад, Forger сказал:

если конечно снаружи нет проблем с аппаратной частью )

Вот этого как раз и не гарантируется. Вывод может оказаться закороченым на землю или еще куда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

51 minutes ago, Forger said:

оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью )

 

21 minutes ago, ViKo said:

Вот этого как раз и не гарантируется. Вывод может оказаться закороченым на землю или еще куда.

Если настроить режим выходного драйвера с открытым стоком, и внешняя схема притянет пин к Vss (схема "монтажного И"), то при записи "1" в ODR, на выходе (значение, прочитанное из IDR) реально будет "0".

Так что в общем случае даже в полностью исправной и рабочей схеме IDR != ODR

Ну а вцелом согласен, задача нетривиальная  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 21.06.2019 в 21:44, -=Женек=- сказал:

 Но хочется сделать изящно.

Если у этого микроконтроллера есть jtag-сканирование, то можно прочитать состояние его выхода. А если нет, то возможно что этот выход подключен к тому, у которого есть... Тогда можно и через него прочитать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, iosifk said:

Если у этого микроконтроллера есть jtag-сканирование, то можно прочитать состояние его выхода. А если нет, то возможно что этот выход подключен к тому, у которого есть... Тогда можно и через него прочитать.

Да тут все проще - ТС внутри одной и той же прошивки как меняет пины, там же и проверят что там наменял. Сам у себя тырит варенье и сам же себя за это наказывает :biggrin:

поэтому JTAG тут как из пушки по воробьям ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, Forger сказал:

поэтому JTAG тут как из пушки по воробьям ))

Да нет же. Просто jtag не требует дополнительного программного кода, загружаемого в микроконтроллер. Ну прочли командой, так этот результат требуется еще как-то визуализировать. 

Впрочем решать "как" все равно ТС. Я же просто показал еще одну возможность... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не стал создавать новую тему - решил тут написать. Только начинаю изучать stm32. Наткнулся в инете на такую запись для проверки значения на ноге PB10:

if(0B1 & GPIOB_BASE -> IDR >> 10)

непонятно - почему это так((

я так это понимаю: (GPIOB_BASE -> IDR >> 10) & 0x01 - 

1. смещаем значение GPIOB_BASE -> IDR на 10 бит вправо (устанавливаем в первую позицию значение этой ноги)

2. далее, как я понимаю, нужно провести операцию &0x01. чтобы понять состояние ноги.

Но в приведенном выше примере стоит 0B1. И к тому же оно идет на первом месте, значит выполняется сначала (или приоритет для операции >>,  а потом уже операция &?)

 

Илия вообще ничего не понял? 

Камрады, помогите ) или ссылочку может какую дадите. В инете копался -= так и не нашел ответа про данный пример.

 

а вообще в инете нашел такой способ проверки if (GPIOB->IDR & GPIO_IDR_IDR10).

Изменено пользователем cfif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...