文章目录
前言
学习MCU串口发送数据,配合示波器观察TTL数据波形可以加深对协议的理解
一、示波器准备
一般的示波器即可,我采用的示波器是鼎阳的200MHZ带宽,1G/S的采样率。
二、硬件介绍
使用乐鑫的ESP32。
三、软件
使用VScode PIO ESP32 Arduino框架
代码如下(示例):
#include <Arduino.h>
HardwareSerial mySerial1(1); //虚拟串口
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySerial1.begin(9600,SERIAL_8N1,32,33); //初始化虚拟串口 32-RX 33--TX
}
void loop() {
// put your main code here, to run repeatedly:
Serial.printf("hello2");
mySerial1.printf("B"); //虚拟串口打印字符'B'
delay(1000);
}
四、串口TTL数据协议
1.波特率
每秒钟传输的码元,常用的有9600和115200。
2.数据起始和停止信号
数据包的起始信号由一个逻辑0的数据位表示,而数据包的停止信号可由0.5、1、1.5或2个逻辑1的数据位表示。
3.数据有效位
在数据包的起始位之后紧接着就是要传输的主体数据内容,也称为有效数据为。有效的长度5-8位长
4.数据校验位
在有效数据后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致数据出现偏差,可以在传输过程中加上校验位来解决这个问题。
奇校验:数据加上校验位的1的数要为奇数。
偶校验:数据加上校验位的1的数要为偶数。
0校验:校验位总为0。
1校验:校验位总为1。
无校验:数据包不含校验位。
五、示波器探头连接
示波器通道1探头老虎钳咬住 ESP32 GND,ESP32 TX GPIO33是虚拟串口发送引脚,示波器探头夹住GPIO33。
黄色线是GND
钳子夹住GPIO33
五、串口数据波形捕获。
mySerial1.printf(“B”); //虚拟串口打印字符’B’,GPIO33串口发送引脚间隔1000ms发送‘B’
字符‘B’的ASCII表对应的hex是0x42。bit也就是100 0010。
方式1:示波器自带的decode进行解码
不同厂商的示波器可能操作不一,我以鼎阳的操作为列。
操作步骤
1.Decode 翻译按钮。
2.配置解码通道选择。
3.总线类型选择 UART。
4.信号选择通道1RX触发阈值3V。
5.编码格式可以选择:二进制、十进制、十六进制、ASCII。
方式2:根据示波器波形比对测量出数据的有效位
总结
通过示波器捕获UART波形,可以帮助加深学习和理解串口的协议,有用的是在工程调试中可以直接判断MCU串口发送数据是否有效,是一个很好的验证方式。