通用同步和异步收发器---Usart

在介绍之前,先简单介绍几种通信协议:
Usart:通用同步异步收发器,这篇文章会详细讲解的。
Uart:通用异步收发器,相当于Usart的异步通信功能。
SPI:串行外设接口,是一种同步协议。
IIC:集成电路总线,同步协议。

首先我个人通俗简单介绍一下几种协议,可以有一个基本的概念。
为什么会有协议产生呢???因为一个电子元器件想和另外一个电子元器件聊天,但是它们自己不会讲话,只会产生一些二进制代码,所以我们就要给这些二进制代码设定一些规则。举例说明,Res1想和Cap1说一句你好,它向电容发出了11100011,我们就可以规定,11100011就是“你好”的意思。不同的协议就像不同的语言,假设11100011在“语言”SPI中代表“你好”,但是在另一种“语言”IIC中,00011100才是代表“你好”,所以就会有了不同的协议产生。
同步异步的区别:我们可以这样区别,同步就相当于Res1在和Cap1打电话,所以它一直要和Cap1保持时刻联系,它在和Cap1打电话的时候不可以去和Cap2,Cap3打电话。异步呢就相当于发短信,Res1可以向Cap1,Cap2,Cap3…任何人发短信,它不需要等到Cap的回复再去继续下一步操作,它可以随时随地的发。
单工、半双工和全双工:这个需要结合图说明更加形象
在这里插入图片描述
假设每种方式的左边为A右边为B
单工:A发送给B,A只有发送功能,B只有接收功能;例如看电视
半双工:A可以发送给B,A也可以接收B的发送;(同一时间只可以存在一方传输给另一方)例如对讲机
全双工:A可以发送给B,A也可以接收B的发送;(同一时间双方可以互相传输)例如打电话。

基本内容就介绍到这里,后面设计到相关内容话会详细讲解,现在就开始Usart的讲解吧!

--------------------------------------------------------分割线------------------------------------
首先我们讲解的是个USART的四个寄存器:
CR(控制寄存器)SR(状态寄存器)DR(数据寄存器)BRR(波特比率寄存器)
首先是四个寄存器的描述:
在这里插入图片描述
CR寄存器:它是USART中的控制寄存器,主要负责USART使能、检验控制使能、校验选择(奇校验偶校验)、PE中断使能、发送缓冲区空中断使能、发送完成中断使能、接收缓冲区非空使能、发送使能、接受使能、字长等等,它只用到了低14位,其他位保留为空。
在这里插入图片描述CR2,CR3的、这里不做过多的解释。。。之后看情况补充。
在这里插入图片描述
SR寄存器:SR寄存器用到了低10位,是用来判断USART状态的一种寄存器。发送寄存器空位、发送完成位、读数据寄存器非空位、检测到主线空闲位、过载错误为等等。
在这里插入图片描述
在这里插入图片描述
BRR寄存器是波特比率寄存器。高16位保存,低16位写数据。【15,4】是整数部分,【3,0】是小数部分。
举例:时钟是72M,波特率为115200

DIV=CLK/(16115200)=39.0625;
所以DIV_Mantissa=39=0x27;
DIV_Fraction=16
0.0626=1=0x01;
so DIV=0x0271
一般寄存器写的时候我们用来反推波特率的!!!
--------------------------------------------分割线------------------------------------------------

void My_Usart_Init(u32 clock,u32 bount)
{
	double temp;
	u16 mantissa;//分频器整数部分
	u16 fraction;//分频器小数部分
	
	temp=(double)(clock*Mhz)/(16*bount);//得到分频数
	mantissa=temp;//分频器整数部分
	fraction=temp-mantissa;//分频器小数部分
	mantissa<<=4;
	mantissa+=fraction;
	
	RCC->APB2ENR|=1<<2;//GPIOA时钟使能
	RCC->APB2ENR|=1<<14;//USART1时钟使能
	
	GPIOA->CRH&=0xfffff00f;//复位端口PA9/PA10
	GPIOA->CRH|=0x000004B0;//PA9设置为复用推挽输出,速度50MHZ/PA10设置为浮空输入
	
	RCC->APB2RSTR|=1<<14;//复位串口1
	RCC->APB2RSTR|=~(1<<14);//停止复位1
	
	USART1->BRR|=mantissa;//设置波特率
	USART1->CR1|=0x200C;//使能串口,字节长度为8,停止位为1(CR2寄存器中设置),支持收发
	
#if EN_USART1_RX	//如果使能了接收
	//使能接收中断 
	USART1->CR1|=1<<5;    //接收缓冲区非空中断使能	    	
	MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级 
#endif

}
int main(void)
{
	u8 res=0x01;
	u8 rr;
	My_Configuration();
	
		while(!(USART1->SR&(1<<7)));
		USART1->DR=res&0x01ff;
		delay_ms(1);
		while(!(USART1->SR&(1<<5)));			
		rr=USART1->DR&0x01ff;
		if(rr==1)
		{
			GPIOA->BRR|=1<<8;
		}

	while(1)
	{

	}

}`

如果对您的问题有帮助的话可以帮忙点个赞,谢谢~QQ群:540093471 有问题大家可以一起交流沟通!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_LiuChunJiang刘春江

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

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

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

打赏作者

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

抵扣说明:

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

余额充值