嵌入式——串口

UART串口

Unversial Aysnc Recevier Transmiter,通用异步收发器,与外接设备进行异步通信方式,是硬件电路中的一种接口

UART有一套自己通信的规则、协议,是异步、全双工、串行通信协议。

接线方式

1,VCC:接电源正极

2,GND:接地

3,RXD:数据接收线

4,TXD:数据发送线

注意:使用串口与外部设备进行通信时,需要交叉连接,即TXD-RXD连接

通信方式

|-----|------------------------------------------------------------------------------------------|
| 方式 | 特点 |
| 单工 | 1,通信时,数据接收方和发送方是固定的 2,数据传输时,通过一根数据线进行传输 3,数据传输方向单一 |
| 半双工 | 1,通信双方既可以作为接收方也可以作为发送方 2,数据传输时,通过一根数据线进行传输 3,数据传输方向可以是双向的,但是在同一时刻的传输方向必须是单向的,即双方不能同时发送数据 |
| 全双工 | 1,通信双方既可以作为数据的发送方,也可以作为数据的接收方 2,数据传输时,通过两根数据线进行传输 3,数据传输的方向在任意时刻都是双向的,即数据的收发可以同时进行 |

UART发送数据顺序

遵循LSB优先的原则,低位先行(最高位MBS,最低位LBS)

|------|-----------|------|------|------|------|------|------|-----------|
| 位序号 | (MBS)bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | (LBS)bit0 |
| 发送数据 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| 发送顺序 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |

发送方发送1101 0011,那么接收方的接收顺序是1100 1011,先发送低位,再发送高位

数据传输形式

|----|--------------------------------------------------------------------------------------|
| 形式 | 特点 |
| 串行 | 1,通过一根数据线将多个bit按先后次序,逐个bit逐个bit发送 2,传输效率慢 3,硬件成本低 4,传输距离远,抗干扰性好 |
| 并行 | 1,通过多根数据线将多个bit同时发送 2,传输速率快 3,硬件成本高 4,传输距离近,抗干扰性差,距离增加后会造成多根数据线的信号偏移,会受到电磁波干扰,出现一些误差 |

串口通信

时序图

1,空闲状态下数据线是高电平

2,发送一个低电平表示起始位

3,发送的第一个比特是最右侧的最低位,一共有八个比特的数据位

4,校验位:用于校验数据发送是否正确,分为奇校验、偶校验和无校验(不需要校验)

5,校验位之后发送一个高电平代表停止位

所以完整的串口通信:低电平起始位+八个比特数据位+校验位(一般无校验)+高电平停止位

校验方法

奇校验,偶校验,累加和校验,CRC校验(Modbus协议)

|------|---------------------------------------------|-------------------------------------------------------|-----------------|
| 奇偶校验 | 方法 | 例子 | 缺点 |
| 奇校验 | 奇校验的校验位为'1',若数据位加上校验位,其中'1''的总个数是奇数个,代表校验通过 | 1010 0110 1一共五个'1',代表校验通过 1010 1110 1一共六个'1' 代表校验无法通过 | 无法判断偶数个bit出错的问题 |
| 偶校验 | 偶校验的校验位为'0',若数据位加上校验位,其中'1''的总个数是偶数个,代表校验通过 | 1010 0110 0一共四个'1',代表校验通过 1010 1110 1一共五个'1' 代表校验无法通过 | 无法判断偶数个bit出错的问题 |

串口通信参数

例:9600 8 N 1、11520 8 O 1、2400 8 E 1:波特率 数据位 校验方法 停止位

波特率(Bits per Second):串口每秒传输bit的数量(常见有2400 4800 9600 115200),单位bps

数据位:数据的位数

N:None,无校验

E:EVEN,偶校验

O:Odd,奇校验

停止位:1

同步和异步

同步:通信双方可以通过一个时钟线进行通信频率的同步

异步:没有时钟线进行同步接收或发送(串口没有时钟线)

串口可以通过收发双方一致的波特率,来实现类似于同步的效果

串口相关寄存器

在串口内部有一个SBUF的寄存器,用来收发数据 ,将数据放在缓冲区,就会根据时序进行收发,这个收发时序不必写

SCON 串行控制寄存器

在SCON寄存器中,可以通过SM0(bit7)和SM1(bit6)来确定串口的工作模式,而在此之前需要把PCON寄存器中的SMOD0位置0

REN位:用来确认是否允许串行接收

TI位:用来查询8位数据是否发送完毕,发送完毕后自动置1,所以清0必须用软件清0

RI位:用来查询8位数据是否接收完毕,接收完毕后自动置1,所以清0也必须用软件清0


8位UART代表数据位

定时器1用作波特率发生器,用于产生串口通信波特率

波特率 定时器初值(定时器1 8位自动重装)计算

smod表示PCON的B7,根据实际情况带入0或1

focs:晶振频率

bps:波特率

32:硬件固定分频系数

12:机器周期分频

2^8:8来自定时器工作方式

PCON 电源控制寄存器

将PCON寄存器中的SMOD位置1,波特率翻倍

TMOD定时器寄存器

TCON 定时器寄存器

IE寄存器

因为串口收发数据后会产生中断,所以B7和BS需要置1

串口通信寄存器配置流程

SCON寄存器(串口)

1,bit6和bit7清0(初始化)

2,bit6置1,指定串口工作模式为方式1

3,bit4置1,代表允许串口接收数据

PCON寄存器(串口)

4,bit6清0,代表通过SCON寄存器中的SM0和SM1共同指定串口工作方式

5,bit7置1,代表波特率翻倍

TMOD寄存器(产生波特率)

6,高4位清0,再将bit5置1,使用定时器1的8位自动重装模式

7,对TL1和TH1赋初值2400bps对应230

TCON寄存器(产生波特率)

8,bit6置1,允许定时器1开始计数

IE寄存器(允许中断)

9,bit7和bit4置1,代表允许CPU响应所有中断,允许串口产生中断

串口收发数据

发送数据程序用轮询,接收数据用中断,串口中通过SBUF存放接收和要发送的数据

软件调试步骤

1,打开程序文件选择响应文件

2,打开串口助手

3,调整串口、波特率、校验位

4,选择响应接收模式和发送模式

5,打开串口

发送字符→字符串

51单片机关键字

Xdata,在定义变量前加上,表示将变量存入外部RAM内,毕竟51单片机内部RAM只有256个字节

数据接收

通过中断处理,因为不知道什么时候会接收到数据

主从应答

主机:主机拥有对通信的绝对控制权,通信都是由主机发起

从机:从机不能直接发起通信,根据主机下发的指令完成对应的控制,并回复给主机应答

Modelbus协议

应用层协议

格式:起始位 + 地址码 + 功能码 + 数据位 + 校验码 +结束位

起始位:数据的开始,可以统一

地址码:单片机对应的地址的编号

功能码:实现的功能

最高位位数据流向位置,0是主机发给从机,1是从机发给主机

校验位:如果通过校验方式得出的不是一个字节,只需保留低字节(例如累加和检验)

数据位:具体控制功能

相关推荐
fy zs2 小时前
TCP/IP 协议栈深度解析
网络·网络协议·tcp/ip
NewCarRen2 小时前
安全碰撞测试:汽车车载IT组件的实际安全评估
网络·网络安全
xinxinhenmeihao3 小时前
使用长效代理是否存在安全风险?长效代理适合哪些应用场景?
服务器·网络·安全
小豪GO!3 小时前
TCP八股
网络·网络协议·tcp/ip
m0_748245923 小时前
HTTP 协议概述
网络·网络协议·http
一颗青果3 小时前
短线重连代码实现
开发语言·网络·c++
23zhgjx-hyh3 小时前
【项目四:网络攻击分析】
网络·安全·web安全
小码吃趴菜3 小时前
http实现服务器与浏览器通信
网络·网络协议·http
muddjsv3 小时前
支撑 TCP/IP 协议运行的核心硬件:从物理层到网络层的全梳理
服务器·网络·tcp/ip