UART

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

并行总线:
在这里插入图片描述
串行总线:
在这里插入图片描述
串行传输和并行传输的优缺点:

1. 串行传输

优点:使用的数据线少,在远距离通信中可以节约通信成本。

缺点:因为每次只能传输一位数据,所以传输速度比较低。

2. 并行传输

优点:因为可以多位数据一起传输,所以传输速度很快。

缺点:内存有多少位,就要用多少数据线,所以需要大量的数据线,成本很高。线和线会有一些信号干扰。

波特率用于描述UART通信时的通信速度,单位为bps(bit per second)即每秒钟传送的bit的数量

UART帧格式:
在这里插入图片描述
串口协议规定,数据位先发低位后发高位。

为什么需要起始位?
如果没有起始位,空闲位为高电平,发送的数据也全是高电平,怎么知道什么时候是空闲状态还是发数据的状态。

校验位可以校验数据的正确性
和校验:比如发的是123,接收到的是223,加起来6不等于7,数据发送错误。
奇偶校验:计算啊数据中有几个1,是偶数个的话就是1,奇数个就为0

校验位只能去校验数据有无错误,不能修正错误

在这里插入图片描述

接收方怎么知道发的是10还是1100,就需要波特率了(相当于语速),比如我一秒说一个字,他那就会一秒收到那一个字,我说了2秒就说明我同一个字说了两次。

因为这是异步的,有可能导致我发了1s,接收到的是0.9s。
连续发送就会产生累计误差,就会错出一位后续数据全乱了。

那么如何避免累计误差?
每次通信最多一个字节。

异步:发送和接收的时钟不同步,就会有误差。

UART控制器
一般情况下处理器中都会集成UART控制器,我们使用UART进行通信时候只需对其内部的相关寄存器进行设置即可。

#include "exynos_4412.h"

int main()
{
	/*1.将GPA1_0和GPA1_1设置成UART2的接收引脚和发送引脚 GPA1CON[7:0]*/
	GPA1.CON     = GPA1.CON     & (~(0xFF << 0)) | (0x22 << 0);
	/*2.设置UART2的帧格式 8位数据位 1位停止位 无校验位 正常模式 ULCON2*/
	UART2.ULCON2 = UART2.ULCON2 & (~(0x7F << 0)) | (0x3<<0);
	/*3.设置UART2的接收和发送模式为轮询模式 UCON2[3:0]*/
	UART2.UCON2  = UART2.UCON2  & (~(0xF << 0))  | (0x5 << 0);
	/*4.设置UART2的波特率为115200 UBRDIV2/UFRACVAL2*/
	UART2.UBRDIV2   = 54;
	UART2.UFRACVAL2 = 4;
	
	while(1){
		/*将发送的数据写入发送寄存器UTXH2*/
		while(!(UART2.UTRSTAT2 & (1 << 1)));
		UART2.UTXH2 = 'A';
		UART2.UTXH2 = 'B';
		UART2.UTXH2 = 'C';
	}
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小阿大:)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值