Я использую плату обнаружения STM32F4, и я намерен установить один из ее контактов GPIO на высокий импеданс, что я сделал, как показано ниже:
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
Насколько я понимаю, для настройки контакта с высоким импедансом необходимо ввести его режим. Я прав?
Если я прочитаю статус этого контакта, я получу значение 1. Я не уверен, должны ли контакты с высоким импедансом возвращать 1 или 0. Может ли кто-нибудь помочь мне понять это.
Вы правильно настроили свой пин. Вывод находится в режиме высокого импеданса и будет иметь только ток утечки в качестве входного тока (порядка микроампер).
Чтение значения вывода даст вам логическое значение напряжения, приложенного к выводу. Уровни напряжения, соответствующие 0 или 1, доступны в техническом описании устройства.
Например , для STM32F401 напряжение до (максимум) 0,35*VDD-0,04 В будет считаться низким или равным 0.
Напряжение не менее 0,4*VDD считается высоким или 1.
Таким образом, если вы подаете на свое устройство 3,3 В, все на контакте до 1,115 В будет считаться 0, а все, что выше 1,32 В, будет считаться 1.
Однако для предотвращения быстрого переключения вывода между двумя состояниями существует гистерезис 0,45 * VDD + 0,3 В. Таким образом, для переключения между двумя состояниями требуется большее изменение напряжения, чем просто разница между 1,115 В и 1,32 В. .
Теперь, если у вас есть неподключенный контакт и вы читаете значение входного регистра, значение в основном не определено. Это может быть либо 0, либо 1, в зависимости от множества факторов, напряжения на соседних выводах, электромагнитных помех и других факторов.
Штырь и подключенная дорожка в основном действуют как антенна. Таким образом, он улавливает все виды сигналов, и поскольку требуется лишь небольшой заряд, чтобы перевести напряжение с уровня 0 на уровень 1, он легко переключается между ними. Это зависит от емкости дорожки и вывода, без дополнительных конденсаторов она находится в диапазоне нескольких пикофарад, которые можно легко заряжать и на которые можно влиять.
Это делает ваш контроллер восприимчивым к внешним помехам. Это может привести к неустойчивому поведению в случае сильных электромагнитных помех (держите мобильный телефон рядом с микроконтроллером), некоторые устройства реагируют гораздо более чувствительно, поэтому даже движение руки над ним может помешать ему.
Из-за этого считается лучшей практикой иметь какую-либо форму активного привода на каждом входном контакте. Либо внешняя цепь обеспечивает постоянное наличие определенного уровня, либо используется подтягивающий или подтягивающий резистор. Большинство микроконтроллеров имеют встроенные резисторы, поэтому внешние компоненты не нужны.
Чтобы включить подтягивающий или подтягивающий резистор на выводе, вы можете использовать файл GPIO_InitStruct.Pull
. Установите его на GPIO_PULLUP
или GPIO_PULLDOWN
соответственно. Какой из них является правильным, зависит от вашего приложения, обычно, если вы ожидаете высокого сигнала, вы должны включить раскрывающееся меню, чтобы убедиться, что вы не получите случайный высокий сигнал. Это также обеспечит надежное чтение, если контакт не подключен.
Неиспользуемые контакты также могут быть настроены как выходные, если они не подключены, чтобы предотвратить нежелательные последствия.
Примечание. Если вы хотите сделать съемную конструкцию, вам следует подумать о дополнительной защите контакта от электростатического разряда.
GPIO_InitStruct
Это устранило бы потенциальную проблему и обеспечило бы считывание согласованного значения».
Роджер Роуленд
смыслов
смыслов
Дэн Лакс
смыслов
кл.