上篇的串口通讯用的是默认的串口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引脚还能用。