ESP32-S3 - GPIO_NUM_21 在启动时短暂变高,没有任何“digitalWrite()”

问题描述 投票:0回答:1

我有一个非常简单的草图正在上传到 ESP32-S3,如下所示:

void setup() {
  pinMode(GPIO_NUM_20, OUTPUT);
  pinMode(GPIO_NUM_21, OUTPUT);
}

void loop() {
  delay(500);
}

这两个 GPIO 引脚连接到两个典型 MOSFET 继电器的输入侧,控制更大的输出。现在,我使用两个 LED(每个继电器的输出侧各一个)来指示常开继电器何时被激活。

我注意到的是,

GPIO_NUM_21
将在启动时调至高电平,并闪烁该简单的草图。也就是说,在大约 30 毫秒内,尽管没有
digitalWrite()
或对该引脚进行其他操作,该引脚仍将处于高电平。这会导致下游继电器被激活 40 毫秒,这对于该板的更大目标来说是不受欢迎的。

从睡眠中醒来时也会发生这种行为,使用如下简单的睡眠计时器:

rtc_gpio_pullup_en(GPIO_NUM_18);
rtc_gpio_pulldown_dis(GPIO_NUM_18);
esp_sleep_enable_ext0_wakeup(GPIO_NUM_18, 0);

运行

esp_deep_sleep_start()
后,然后将
GPIO_NUM_18
(一个简单的按钮)调至低电平,开发板将按预期唤醒,并且再次,尽管没有执行
GPIO_NUM_21
或类似操作,但
digitalWrite()
仍会变为高电平约 30 毫秒,并且
setup()
块没有被执行。

查看 ESP32-S3 的 Espressif 引脚图,我发现 GPIO20 和 GPIO21 的功能并不“相同”:

有没有办法阻止该引脚上的这种行为,或者我是否需要为我的目的选择另一个 GPIO 引脚(不在启动/唤醒时激活继电器)?

arduino esp32 arduino-esp32
1个回答
0
投票

ESP32 GPIO 引脚在加电和休眠时通常处于浮动状态(无确定状态),除非您专门对其进行编程。开机和代码执行之间的设置时间似乎是您测量的 30 毫秒。

想到的简单解决方案是在这些 GPIO 线上放置外部上拉或下拉电阻,以便您控制它们的默认状态。 10K 到 100K 之间的值非常适合您的应用。

© www.soinside.com 2019 - 2024. All rights reserved.