Jump to content

    

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
8 minutes ago, -=Женек=- said:

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

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

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

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

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

image.png.da0902216f9dba9c2385db338dd984b8.png

 

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

Share this post


Link to post
Share on other sites
13 minutes ago, -=Женек=- said:

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

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

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

 

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 21.06.2019 в 21:53, Forger сказал:

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

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

Share this post


Link to post
Share on other sites
1 hour ago, ViKo said:

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

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

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
1 minute ago, VladislavS said:

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

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

 

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites
51 minutes ago, Forger said:

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

 

21 minutes ago, ViKo said:

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

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

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

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

Share this post


Link to post
Share on other sites
В 21.06.2019 в 21:44, -=Женек=- сказал:

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

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

Share this post


Link to post
Share on other sites
5 minutes ago, iosifk said:

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

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

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

Share this post


Link to post
Share on other sites
Только что, Forger сказал:

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now