вход !== выходной сигнал - почему?

Я использую плату Nucleo STM32G431KB (nucleo_g431kb — 170 МГц) с PlatformIO и фреймворком Arduino.

Мой простой код выглядит так:

void setup()
{
  pinMode(PA11, INPUT);
  pinMode(PA12, OUTPUT);
}

void loop()
{
  if (digitalReadFast(PA_11) == HIGH) {
    digitalWriteFast(PA_12, HIGH);
  }
  else {
    digitalWriteFast(PA_12, LOW);
  }
}

На контакте 11 я получил четко определенный входной сигнал, как показано на рисунке ниже (желтый сигнал). Синий сигнал на картинке — это сигнал от STM32 (контакт 12).

Теперь синий сигнал не так определен, как желтый. Теоретически они оба должны быть идентичными, не так ли? Как получить выходной сигнал, отражающий входной сигнал? Чип должен иметь достаточную мощность. Пробовал подтягивающий резистор, ничего не изменилось. Наверное, я просто тупой.

введите здесь описание изображения


person André Fiedler    schedule 30.01.2021    source источник
comment
Пик этого желтого сигнала составляет 1 В? Предполагая, что вы питаете ESP32 3,3 В, 1 В находится между 0 и 1 (не определено). Что происходит, когда вы используете входной сигнал 2,5 В?   -  person ocrdu    schedule 30.01.2021
comment
Оно должно быть 3,3 В, оно идет от Wemos D1 Mini. Просто разрешение осзи установлено на 1В.   -  person André Fiedler    schedule 30.01.2021
comment
Я измерил, примерно 2,86 В i.imgur.com/YSUwPsA.jpg   -  person André Fiedler    schedule 30.01.2021
comment
Должно быть достаточно. Вы читаете с контакта, определенного как выход, и пишете на контакт, определенный как вход, если я не ошибаюсь, это вполне может быть.   -  person ocrdu    schedule 30.01.2021
comment
Ты прав! facepalm Изменил его, но он не сильно изменился в отношении кривой. :/   -  person André Fiedler    schedule 30.01.2021
comment
Хорошо, не могли бы вы попробовать с двумя другими булавками? Вы подали внешнее напряжение на контакт, определенный как выход и установленный на НИЗКИЙ (по умолчанию); возможно, вы поджарили эту булавку.   -  person ocrdu    schedule 30.01.2021
comment
Работает ли это, если вы конвертируете имя вывода pinMode(pinNametoDigitalPin(PA_12),OUTPUT) ? и т.п.   -  person user3486184    schedule 30.01.2021
comment
Да, возможно, вы также подключились к неправильным контактам; дважды проверьте, действительно ли что-то связано с PA_11 и PA_12, используя pinNametoDigitalPin(), как предложено пользователем 3486184, и если установленные вами PA11 и PA12 (без подчеркивания) каким-то образом идентичны PA_11 и PA_12, которые вы используете для чтения и записи.   -  person ocrdu    schedule 30.01.2021


Ответы (1)


Попробуйте внутренний подтягивающий резистор, такой как

pinMode(PA12, OUTPUT_PULLUP);

Также попробуйте изменить выходной контакт в качестве теста, потому что кажется, что что-то еще (какой-то другой процесс) также пытается извлечь тот же выходной контакт.

person A 786    schedule 30.01.2021