-=Женек=- 0 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба Добрый вечер. Это не совсем то, что вы подумали. Мне не нужно читать состояние пина, настроенного на вход. Есть код, который периодически подает единичку на один из настроенных на вывод пинов, допустим GPIOB, GPIO_PIN_13. Код живет своей жизнью. Но вот захотелось мне узнать, а включена ли эта ножка? Можно конечно в код, который включает ножку, добавить установку некоего флага и анализировать его. Но хочется сделать изящно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksandr Baranov 1 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба 8 minutes ago, -=Женек=- said: Добрый вечер. Это не совсем то, что вы подумали. Мне не нужно читать состояние пина, настроенного на вход. Есть код, который периодически подает единичку на один из настроенных на вывод пинов, допустим GPIOB, GPIO_PIN_13. Код живет своей жизнью. Но вот захотелось мне узнать, а включена ли эта ножка? Можно конечно в код, который включает ножку, добавить установку некоего флага и анализировать его. Но хочется сделать изящно. Ну, просто прочитать соответствующий вход Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба 13 minutes ago, -=Женек=- said: Но хочется сделать изящно. Совсем одичали? Просто читайте тот регистр, куда пишите состояние нужной ноги или целого порта. Читать можно когда угодно. "Изящнее" некуда )) зы. пока писал этот очевидный ответ, меня опередил коллега - оно еще вам и красивую картинку-раскраску выложил, развлекайтесь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
-=Женек=- 0 21 июня, 2019 Опубликовано 21 июня, 2019 · Жалоба Чет я не думал, что так просто.... Quote Совсем одичали? Наверное да.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба Ну можно ещё EXTI настроить на оба фронта и по изменению пина влетать в прерывание Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба В 21.06.2019 в 21:53, Forger сказал: Просто читайте тот регистр, куда пишите состояние нужной ноги или целого порта. Нет, не тот регистр. Картинка выше показывает, какой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 1 hour ago, ViKo said: Нет, не тот регистр. Картинка выше показывает, какой. Да, конечно, логичнее читать IDR, но оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью ) Если дрыгать пином через BSRR регистр, то читать все равно придется IDR или ODR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 13 минут назад, Forger сказал: Да, конечно, логичнее читать IDR, но оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью ) Не факт, можно записать в ODR и успеть прочитать IDR до того когда данные реально в нём появятся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 1 minute ago, VladislavS said: Не факт, можно записать в ODR и успеть прочитать IDR до того когда данные реально в нём появятся. Что есть, то есть )) Но задача изначально очень уже необычная Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 33 минуты назад, Forger сказал: если конечно снаружи нет проблем с аппаратной частью ) Вот этого как раз и не гарантируется. Вывод может оказаться закороченым на землю или еще куда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 51 minutes ago, Forger said: оба регистра - ODR и IDR покажут одно и то же для output пина, если конечно снаружи нет проблем с аппаратной частью ) 21 minutes ago, ViKo said: Вот этого как раз и не гарантируется. Вывод может оказаться закороченым на землю или еще куда. Если настроить режим выходного драйвера с открытым стоком, и внешняя схема притянет пин к Vss (схема "монтажного И"), то при записи "1" в ODR, на выходе (значение, прочитанное из IDR) реально будет "0". Так что в общем случае даже в полностью исправной и рабочей схеме IDR != ODR Ну а вцелом согласен, задача нетривиальная Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба В 21.06.2019 в 21:44, -=Женек=- сказал: Но хочется сделать изящно. Если у этого микроконтроллера есть jtag-сканирование, то можно прочитать состояние его выхода. А если нет, то возможно что этот выход подключен к тому, у которого есть... Тогда можно и через него прочитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 26 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба 5 minutes ago, iosifk said: Если у этого микроконтроллера есть jtag-сканирование, то можно прочитать состояние его выхода. А если нет, то возможно что этот выход подключен к тому, у которого есть... Тогда можно и через него прочитать. Да тут все проще - ТС внутри одной и той же прошивки как меняет пины, там же и проверят что там наменял. Сам у себя тырит варенье и сам же себя за это наказывает поэтому JTAG тут как из пушки по воробьям )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 3 июля, 2019 Опубликовано 3 июля, 2019 · Жалоба Только что, Forger сказал: поэтому JTAG тут как из пушки по воробьям )) Да нет же. Просто jtag не требует дополнительного программного кода, загружаемого в микроконтроллер. Ну прочли командой, так этот результат требуется еще как-то визуализировать. Впрочем решать "как" все равно ТС. Я же просто показал еще одну возможность... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cfif 0 31 октября, 2022 Опубликовано 31 октября, 2022 (изменено) · Жалоба не стал создавать новую тему - решил тут написать. Только начинаю изучать 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). Изменено 31 октября, 2022 пользователем cfif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться