UART(一)

本文详细介绍了通用异步收发器(UART)的工作原理,包括串行与全双工通信、TTL与RS232的区别、波特率与比特率概念,以及如何配置UART基础、中断处理和数据流控制。还讨论了FIFO和DMA在减轻CPU工作量中的作用。
摘要由CSDN通过智能技术生成

基础

简介

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=比特率
在这里插入图片描述

波特率与时钟频率关系如下(码元为单bit时

数据流

收发是一个周期一个周期进行的,每个周期传输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死循环,定时器接收(速度不够快时会丢失字符)

中断uart示例
配置步骤
中断配置
中断函数

USART

串口应用协议:

在这里插入图片描述
配置uart基础,中断,处理定时器
中断接收数据
定时器循环读数据
筛选有效数据:长度是否正确,取出指令,数据,计算校验码
处理指令,数据,回复数据

code
code2
code3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值