GPIO 与第一颗灯
点灯之外:上下拉、复位时序与 boot 引脚的坑。
最小点灯程序
#define LED_PIN 2 // 多数 DevKit 板载 LED 在 GPIO2
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
能跑起来不算完,下面这些才是 ESP32 和 STM32 不一样的地方。
引脚使用前的三个检查
- 是不是 strapping 引脚:GPIO0(BOOT)、GPIO2、GPIO5、GPIO12、GPIO15 在上电瞬间 有特殊含义。GPIO12(MTDI)拉高会让 flash 电压变成 1.8V 导致启动失败—— 这是新手「烧录正常、复位起不来」的头号原因,详见 上电复位时序的研究。
- 输入模式记得配上下拉:
pinMode(BTN, INPUT_PULLUP), 悬空输入在 ESP32 上漂得比 STM32 更明显。 - 只接输入的引脚:GPIO34~39 只能输入、没有内部上下拉,按键别用它们。
按键去抖(不用 delay 的写法)
const uint8_t BTN = 4;
bool last = HIGH;
void setup() { pinMode(BTN, INPUT_PULLUP); Serial.begin(115200); }
void loop() {
bool now = digitalRead(BTN);
if (last == HIGH && now == LOW) {
Serial.println("按下(这个沿已经天然过滤了大部分抖动)");
}
last = now;
delay(10); // 简单采样去抖,够用
}