UART串口协议

       Universal Asynchronous Receiver Transmitter,即通用异步收发器,是一种通用的串行异步通信总线。该总线有两条数据线,可以实现全双工的发送和接收。在嵌入式系统中常用于主机于辅助设备之间的通信。如图所示:

       ps:一般情况下,处理器中都会集成UART控制器(包括接收器、发送器),我们使用UART串口通信时,只需要对其内部的相关寄存器进行设置即可,具体配置见芯片手册。

UART帧格式:

串口通信发送0x55(即01010101):

过程:1.空闲时数据线为高电平;

           2.先发送一个起始位(低电平0);

           3.发送数据是先发低位,再发高位(即10101010)

           4.再发校验位,串口用奇偶校验(偶数个1则该位为高电平);(可省略)

           5.最后发停止位(高电平1),可以是1位、1.5位、2位。

       Ps:不能发完一个字节,紧接着发下一字节,这种情况是不允许的,必须有空闲位间隔开。究其原因,UART串口通信是异步通信,通信双方没有共同的时钟基准(CKL线),存在时间误差,连续发送字节会造成累积误差,因此每次最多发送一个字节。

思考问题:串口通信如何连续收发多少个1或0呢?举例01的波形和0011的波形一样,先低后高。但是低电平持续过程表示几个0,高电平持续过程表示几个1,我们不得而知。

解决问题:比特率,用于描述UART串口通信时的通信速度,其单位为bps,即每秒钟传送的bit数量。比特率为1bps,即每秒发1b it,高低电平持续一秒表示完整的0或1。

对比:波特率,其单位为Baud,即每秒传送符号(码元、波形)的个数。符号是在固定时间段T(称符号长度或码元长度)内持续存在的波形或特征状态。

关系:比特率=比特数/传输时间(bit/s)

      波特率=符号数/传输时间(Baud)

      波特率与比特率的关系为:比特率=波特率 单个符号对应的信息量

      例如,二电平信号在波特率为1波特时,比特率为1比特每秒;而16QAM信号一个符号为16种状态中的一种,则一个符号的信息量为log216= 4比特,即波特率为1Baud时,比特率为4比特每秒。

总结:串口寄存器编程所需设置内容

  1. 设置帧格式;
  2. 设置接收、发送数据模式(轮询、中断、DMA);
  3. 设置波特率;
  4. 将发送数据写入发送寄存器;
  5. 发送一个数据前,先用while语句去判断状态寄存器(只读不写);
  6. 接收一个数据前,先用if语句去判断状态寄存器;
  7. 用赋值语句读取接收寄存器的数据。

补充:CPU于外围硬件数据交互的模式有三种

  1. 轮询:首先CPU想用数据,串口控制器替它接收外部数据。但问题是CPU不知所用数据何时到达串口寄存器。此时,CPU不断去读串口控制器的接收寄存器。直到串口控制器的接收寄存器有数据,CPU将其读走。
  2. 中断:首先CPU想用数据,串口控制器替它接收外部数据。CPU不知何时数据能够达到串口控制器。此时CPU与串口控制器约定:若接收寄存器接收到数据,就给CPU发一个中断信号。
  3. DMA(直接存储器访问):首先CPU想用数据,串口控制器替它接收外部数据。CPU不知何时数据能够达到串口控制器。接收寄存器接收数据后,直接将数据发给CPU的特定寄存器。当CPU想用数据时直接读取CPU内特定寄存器即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劉欣雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值