基础
简介
universal asynchronous receiver and transmitter 通用异步收发器
将传输数据的每个二进制位 一位位顺序传输
高电平代表1
低电平代表0
uart传输一个字节即在信号线上产生8个1/0组合
特点
串行:一条线 (通用串口使用两条线,RX+TX实现全双工)
异步:传输单位为字符,两个字符间时间间隔不固定 ,同一个字符间时间间隔固定,通信不需要时钟线,因此需要硬件协议(初始化时设置):有相同的传输速率(波特率),相同的空闲位、起始位、校验位(判断数据是否正确)。
全双工:在某一时刻支持同时发射和接受
半双工:不同时发送接受
单工:单线单方向
TTL和RS232的差别在于1,0的电平范围不同,不可混接
数据协议(初始化时配置)
波特率
数据传送速率:波特率,每秒钟传送的码元数,1波特指每秒传输一个信号
比特率:每秒钟传送的二进制比特数,bit/s
比特率=波特率x单个调制状态对应的二进制位数
C = B ∗ l o g 2 N ( C 表示比特率,B 表示波特率,N 表示进制)
码元:携带数据信息的信号单元,使用若干bit展示不同状态
当码元的离散状态个数M大于2时,称为M进制码元。
两相调制码元离散状态有2种(单个调制状态对应一个二进制位)0,1;波特率=比特率
四相调制码元的离散状态有4种(单个调制状态对应2个二进制位),00,01,10和11;波特率2=比特率
八相调制码元的离散状态有8种(单个调制状态对应3个二进制位),以此类推。波特率3=比特率
数据流
收发是一个周期一个周期进行的,每个周期传输n个二进制位。这一个周期就叫做一个通信单元,一个通信单元由:起始位+数据位+奇偶校验位+停止位组成的
空闲位:默认高电平
起始位:发一个0表示数据开始,下降沿,1位
数据位:先低后高,6-9位一般8位ASCII
奇偶校验:1位
1、无校验no parity
2、奇校验 odd parity 原始有奇数个1即为0,原始码+校验位共有奇数个1
3、偶校验 even parity 偶数个1为0
4、mark parity 为1
5、parity 为0
停止位:字符结束标志,表示传输结束和提供校正时钟的机会,1-2位
流程
串口控制器包含transmitter 和receiver
receiver:接收缓冲器+接收移位寄存器,信息通过RX线进入接收移位寄存器中,一帧数据满后自动移位并保存二进制入接受缓冲区,接受完产生一个CPU中断
transmitter:发送缓冲区+发送移位寄存器,编码(ASCII)为二进制,一帧数据写入发送缓冲区,发送移位寄存器自动读取移位发到TX线上
软件工程师对串口操作的接口就是发送/接收缓冲区(实际就是寄存器,操作方式就是读写内存)。
典型串口,发送接受缓冲区只有1字节,扩展缓冲区->FIFO
关于减轻CPU工作量
FIFO
先进先出,后进后出
输入输出速率不匹配,时钟域不匹配,输入输出位宽不匹配,作为临时存储单元调整
对连续的数据流进行缓存,防丢失数据
数据集中进机和存储,可避免频繁的总线操作,减轻cpu负担
读写时钟:同步FIFO:读写时钟在同一个时钟沿来临时同时发生读写,异步FIFO读写时钟不一致,相互独立
读写控制:读写控制使能
满信号:FIFO信号数量达到最大深度值,写快读慢
空信号:FIFO信号全部被读出,写信号慢读信号快时或者reset
深度:能容纳的最大信号数量
DMA
direct memory access,直接内存访问
交换数据不需要CPU,减少CPU 工作量
关于中断
发送方需要发数据时发,可以不用中断
接受方必须时刻等待,否则会丢失数据:
中断方式:设置中断,绑定中断处理程序,接受数据,接受完会产生RXD中断,中断会导致事先绑定的中断处理程序执行,一般情况下,中断处理程序会发消息让其他函数来read数据,不可以在中断处理程序中调用read,会影响中断,再额外开一个定时器对接受到的数据做出相应的处理
不使用中断:while死循环,定时器接收(速度不够快时会丢失字符)
USART
串口应用协议:
配置uart基础,中断,处理定时器
中断接收数据
定时器循环读数据
筛选有效数据:长度是否正确,取出指令,数据,计算校验码
处理指令,数据,回复数据