ESP32-C3不要将GPIO2用于软串口(SoftwareSerial)通信

By | 2025/09/05

有个DIY用到了ESP32-C3多串口通讯,自带的2个硬件不够就启用了软串口(EspSoftwareSerial库),在面包板上验证的时候问题不大,但当在PCB上验证的时候,就死活不行了,对比了下就只是改了模拟串口的io,通过示波器最后发现GPIO2不是高电平,即使拉高也没有信号,这就奇怪了……

经过一番研究,发现问题出在EspSoftwareSerial类库对GPIO口的判断上,代码如下:

    #elif CONFIG_IDF_TARGET_ESP32C3
        // Datasheet https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf,
        // Pinout    https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/_images/esp32-c3-devkitm-1-v1-pinout.jpg
        return (pin >= 0 && pin <= 1) || (pin >= 3 && pin <= 7) || (pin >= 18 && pin <= 21);
    #else
        return pin >= 0;
    #endif

竟然根据Pinout把GPIO02直接排除了,但datasheet里面并没有什么特殊限制,坑啊……

这里总结下:

1、ESP32-C3的GPIO2不建议用于软串口(SoftwareSerial)通信,像我这样需要修改类库的源代码才能支持。

2、软串口通讯即使9600的速率也会出问题,所以硬件串口满足的情况下尽量用硬件串口。

© 2025, 爱上生活. 版权所有,非商业使用转载必须提供本文章的原始链接。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注