乐鑫技术交流
直播中

张莉

7年用户 1240经验值
私信 关注
[问答]

ESP32 PIN16 PIN17在设置为gpio后无法设置为uart,怎么处理呢?

Arduino下,用UART做LIN通讯,需要至少连续发送13位长度的低电平,但是uart的Serial2.write一次只能发送一个字节长度的低电平,结束后就会拉高,违反了通讯规则
所以想要通过使用gpio来实现长时间低电平,但是在将PIN17设置为gpio之后无法再将PIN17设置为uart了
请给予帮助,谢谢

回帖(1)

我有一车切糕

2024-6-6 18:13:38
在这种情况下,您可以尝试以下步骤来解决问题:

1. 首先,确保您已经正确安装了ESP32开发板的Arduino核心。在Arduino IDE中,打开“文件”>“首选项”,在“附加开发板管理器网址”中添加ESP32的URL:https://dl.espressif.com/dl/package_esp32_index.json。然后打开“工具”>“开发板”>“开发板管理器”,搜索并安装“esp32”开发板。

2. 在编写代码时,确保您已经正确地设置了UART。以下是一个示例代码,用于初始化UART并将其与GPIO 16和17关联:

```cpp
#include

void setup() {
  Serial.begin(115200);
  Serial2.begin(115200, SERIAL_8N1, 16, 17); // 设置UART2,使用GPIO 16和17
}

void loop() {
  // 这里可以添加您的代码
}
```

3. 如果您仍然无法将PIN16和PIN17设置为UART,可以尝试使用其他引脚。ESP32有多个UART通道,您可以尝试使用其他通道和引脚。例如,使用UART0(TX:1,RX:3)或UART1(TX:10,RX:9)。

4. 如果您需要长时间保持低电平,可以考虑使用软件PWM(脉冲宽度调制)来控制GPIO引脚。以下是一个示例代码,用于在GPIO 16上生成低电平:

```cpp
#include

void setup() {
  Serial.begin(115200);
  pinMode(16, OUTPUT);
}

void loop() {
  digitalWrite(16, LOW); // 保持低电平
  delay(1000); // 持续1秒
}
```

5. 如果以上方法都无法解决问题,建议您查阅ESP32的官方文档和相关论坛,以获取更多关于UART和GPIO配置的信息。

希望这些建议能帮助您解决问题。祝您编程愉快!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分