关于串口的理解

        串口(usart)(串行通信接口)把I/O口接收到的数据通过串口(usart)寄存器放到内存上

        USART(通用同步/异步收发器)和UART(通用异步收发器)的区别主要在于USART具有同步和异步两种数据传输模式,而UART仅支持异步数据传输。以下是两者其他方面的区别

串口初始化

/*
Function name:Usart1_Config
Description:串口1初始化
param:brr-->波特率
retval:None
Remarks:
PA9:复用推挽输出
PA10:复用
*/
void Usart1_Config(u32 brr)
{
	RCC->AHB1ENR|=(1<<0);//PA时钟
	RCC->APB2ENR|=(1<<4);//USART1时钟

  USART1的接收端和发送端在PA9和PA10的I/O口上  

        外设复位寄存器在APB2RSTR上,端口在第四位

    //IO PA9
	GPIOA->MODER &=~(3<<18);//清零
	GPIOA->MODER |=(2<<18);//复用
	GPIOA->OTYPER&=~(1<<9);//推挽
	GPIOA->AFR[1]|=(7<<4);//选择USART1复用功能
	//PA10
	GPIOA->MODER &=~(3<<20);//清零
	GPIOA->MODER|=(2<<20);//复用
	GPIOA->AFR[1]|=(7<<8);//选择USART1复用功能
	
	//USART1  USARTDIV是一个无符号定点数(div),
	float div;
	u32 div_f,div_m;//div_f是USARTDIV的小数部分,div_m是USARTDIV的整数部分
	div=84000000.0/16/brr;
	div_m=(u32)div;
	div_f=(div-div_m)*16+0.5;
	USART1->BRR=div_m<<4|div_f;

PA0~PA7是低位寄存器用数组表示GPIOA->AFR[0]

PA8~PA15是高位寄存器用数组表示GPIOA->AFR[1]

USART1在AF7值为0111,

div_f是USARTDIV的小数部分,div_m是USARTDIV的整数部分

	USART1->CR1 |=(3<<2);//发送器/接收器 使能
	USART1->CR1 &=~(1<<10);//禁止奇偶校验
	USART1->CR1 &=~(1<<12);//字长 8位数据位
	USART1->CR1 &=~(1<<15);//16倍过采样
	USART1->CR2 &=~(3<<12);//1位停止位
	
	USART1->CR1 |=(1<<13);//使能USART1
}

完整代码

/*
Function name:Usart1_Config
Description:串口1初始化
param:brr-->波特率
retval:None
Remarks:
PA9:复用推挽输出
PA10:复用
*/
void Usart1_Config(u32 brr)
{
	RCC->AHB1ENR|=(1<<0);//PA时钟
	RCC->APB2ENR|=(1<<4);//USART1时钟
	
	//IO PA9
	GPIOA->MODER &=~(3<<18);//清零
	GPIOA->MODER |=(2<<18);//复用
	GPIOA->OTYPER&=~(1<<9);//推挽
	GPIOA->AFR[1]|=(7<<4);//选择USART1复用功能
	//PA10
	GPIOA->MODER &=~(3<<20);//清零
	GPIOA->MODER|=(2<<20);//复用
	GPIOA->AFR[1]|=(7<<8);//选择USART1复用功能
	
	//USART1  USARTDIV是一个无符号定点数(div),
	float div;
	u32 div_f,div_m;//div_f是USARTDIV的小数部分,div_m是USARTDIV的整数部分
	div=84000000.0/16/brr;
	div_m=(u32)div;
	div_f=(div-div_m)*16+0.5;
	USART1->BRR=div_m<<4|div_f;
	
	USART1->CR1 |=(3<<2);//发送器/接收器 使能
	USART1->CR1 &=~(1<<10);//禁止奇偶校验
	USART1->CR1 &=~(1<<12);//字长 8位数据位
	USART1->CR1 &=~(1<<15);//16倍过采样
	USART1->CR2 &=~(3<<12);//1位停止位
	
	USART1->CR1 |=(1<<13);//使能USART1
}

  • 23
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值