UART:
Unervisal Async Recveiver Transmitter,通用异步收发器,全双工 串行 异步
RXD:接收信号线
TXD:发送信号线
单工:
通信时,数据接收方和发送方是固定的,通过一根信号线实现数据收发,数据传输的方向是单一的(只能由发送方发给接收方)
半双工:
通信时,数据接收方和发送方不是固定的(双方都可以发送或接收数据)通过一根信号线实现数据收发,数据传输的方向可以是双向的(同一时刻,数据传输的方向是单一的)
I2C:SCL 时钟线 SDA 数据线
全双工:
通信时,数据接收方和发送方不是固定的(双方都可以发送或接收数据),通过两根信号线实现数据收发,数据传输的方向是双向的
串口发送数据时,遵循LSB 低位先行原则,先发送数据低位,再发送高位
串行:
通过一根信号线将要发送的数据逐个bit逐个bit的进行发送
-
传输速度慢
-
成本低,实现简单
-
传输距离远(RS485 差分 抗干扰性好)
并行:
通过多根信号线同时去传输多个bit
- 传输速度快
2.成本高,实现复杂
- 传输距离近(30米以内,存在信号偏移、电磁波干扰)
奇校验:
奇校验值为'1',若数据位中'1'的个数加上奇校验中的'1',保持'1'的总个数为
奇数个,则代表奇校验通过
偶校验:
偶校验值为'0',若数据位中'1'的个数加上偶校验中的'0',保持'1'的总个数为偶
数个,则代表偶校验通过
奇偶校验无法判断偶数个bit出错的问题
串口通信参数:
9600 8 N 1
115200 8 E 1
波特率:bits per second,每秒传输bit数量
8:8位数据位
N:None 无校验
O:Odd 奇校验
E:Even 偶校验
1: 1位停止位
同步: 有时钟线,通信双方可以通过时钟线来实现通信频率同步
**异步:**没有时钟线,通信双方无法通过时钟线实现同步
串口是一种异步通信协议,但可以通过波特率实现类似同步
Modbus 协议(主从应答)
主机-> 从机:
起始位 地址码 功能码 数据位1 数据位2 校验码 结束位
0xAA 0x01 0x01 0x42 0x00 0xEE 0xBB
功能码的低四位用来区分控制对象:
01:控制led
02: 控制数码管
03:控制蜂鸣器
04:温度采集
功能码的高四位是数据流向位:
0:主机->从机
1:从机->主机
校验码是前五位数据之和
从机 -> 主机:
起始位 地址码 功能码 数据位1 数据位2 校验码 结束位
0xAA 0x01 0x81 0x42 0x00 0x6E 0xBB
主机下发Modbus协议指令,从机接收指令解析获得功能码,根据功能码完成对外设的控制,并给主机回复应答
ds18b20 (数字温度传感器)
参数:
-
量程(测量范围) -55℃ - 125℃
-
精度(误差):±0.5℃
-
分辨率
9位:0.5℃
10位:0.25℃
11位:0.125℃
12位:0.0625℃
-
接口:GPIO 单总线
-
工作电压: 3V- 5.5V
线与特性:
多个设备的输出引脚直接连接,实现"与"逻辑。只要有一个设备输出低电平,总线就被拉低
作为数据接收方时,需要释放总线(拉高电平)
DS18B20采集温度的流程:
1、复位
2、发送0xCC,跳过ROM
3、发送0x44,开启温度转换
4、延时1s
5、复位
6、发送0xCC,跳过ROM
7、发送0xBE,读取温度
8、读取2字节温度

主机将总线拉低480us - 960us,代表发送了复位脉冲;
主机释放总线,ds18b20需要再15-60us内检测引脚是否为高电平;
主机再60-240us内检测引脚是否为低电平,如果是低电平,代表ds18b20回复了存在脉冲;
主机释放总线,引脚呈现高电平。

写0时序:
主机将总线拉低至少60us,不超过120us;
ds18b20在60us内来采样引脚电平,若是低电平,则代表主机发送了bit 0;
主机释放总线,引脚变为高电平;
写1时序:
主机将总线拉低大于1us;
释放总线,引脚变为高电平;
ds18b20在45us内对引脚的电平进行采样,若是高电平,代表主机发送了bit 1;

读时序:
主机将总线拉低大于1us;
释放总线,引脚呈现高电平;
主机再15us内对引脚电平进行采样;
若采到一个低电平,代表ds18b20发送了bit0;
若采到一个高电平,代表ds18b20发送了bit1;
DHT11(温湿度传感器)
参数:
测量范围:
温度:0 - 50℃
湿度:20-90%RH
精度:
温度:±2℃
湿度:±5%RH
分辨率:1
供电电压:3 - 5.5V
DHT11传输数据:40个bit,5个字节;先发高位。
1字节湿度整数 + 1字节湿度小数 + 1字节温度整数 + 1字节温度小数+ 1字节校验和
dht11通信时序:

主机发送起始信号:
主机将总线先拉低至少18ms,释放总线,将总线拉高20 - 40us,代表主机向dht11发送了一个起始信号

dht11回复响应信号:
DHT11将总线拉低至少80us,释放总线,拉高80us;最后dht11将总线拉低,准备开始传输数据


dht11传输数据:
传输'0':dht11将总线拉低50us,再将总线拉高持续26-28us左右;
传输'1': dht11将总线拉低50us,再将总线拉高持续60 - 70us左右。