ESP32的MODBUT RTU串口配置填坑记

上篇的串口通讯用的是默认的串口0,即Serial。0号串口使用的引脚是1,3。在t-display板上没有该引脚,所以在实际项目中,要使用其它串口。好在esp32有3个串口,3个串口都能自定义引脚。

esp32提供了HardwareSerial这个库用于定义串口。具体库位置在
C:\Program Files (x86)\Arduino\hardware\espressif\esp32\cores\esp32。有兴趣可看一下接口定义,文件为HardwareSerial.h,HardwareSerial.cpp。

我就直接讲怎么用。
先定义串口。

HardwareSerial modbusSerial(1);//定义1号串口,用于modbus通讯,0 1 2三个串口

再初始化串口

void setup() {
  modbusSerial.begin(9600, SERIAL_8E1, 32, 33);//波特率 配置参数 RX TX
  mb.begin(&modbusSerial);//把串口给modbus用
}

串口配置参数如下

config可选配置 数据位 校验位 停止位
SERIAL_5N1 5 1
SERIAL_6N1 6 1
SERIAL_7N1 7 1
SERIAL_8N1 8 1
SERIAL_5N2 5 2
SERIAL_6N2 6 2
SERIAL_7N2 7 2
SERIAL_8N2 8 2
SERIAL_5E1 5 1
SERIAL_6E1 6 1
SERIAL_7E1 7 1
SERIAL_8E1 8 1
SERIAL_5E2 5 2
SERIAL_6E2 6 2
SERIAL_7E2 7 2
SERIAL_8E2 8 2
SERIAL_5O1 5 1
SERIAL_6O1 6 1
SERIAL_7O1 7 1
SERIAL_8O1 8 1
SERIAL_5O2 5 2
SERIAL_6O2 6 2
SERIAL_7O2 7 2
SERIAL_8O2 8 2

在触摸屏那边,我设置了数位8偶校验停止位1,所以这里我们需要选择SERIAL_8E1,两边一定要一样,否则,通不了。如果说是参数不一样,比如我之前就写成了SERIAL_8N1,从机能收到触摸屏主机那边的通讯数据,但主机就收不到从机的数据了。这个坑至少填了一天。

还有引脚冲突的坑,t-display这个板子提供的文档实在少的可怜,只有一张图,有好多引脚已经被用了,文档里看不出来,只能自己试。后来试到了32,33引脚还能用。

发布了5 篇原创文章 · 获赞 0 · 访问量 651

猜你喜欢

转载自blog.csdn.net/zgj_online/article/details/102697267