stm32学习总结——串口USART

总结一下关于串口的一些点,个人学习的总结,欢迎交流指正. 

原子和野火的视频都看了些.

一.串口通信协议

通信方式

串口通信是一种串行异步的通信方式.

总线

实现方法简单只有三根线:

RXD:发送线.

TXD:接收线.

GND:直连共地.

数据帧格式

起始位固定为一位低电平,停止位可以是0.5/1/1.5/2位高电平.

校验位的校验方法

  1. 奇校验:保证数据为和校验位中的1的个数为奇数个
  2. 偶校验:保证数据位和校验位中的1的个数为偶数个
  3. 1校验:固定为1
  4. 0校验:固定为0
  5. 无校验:不进行校验

二.功能框图

我觉得的话,这个功能框图主要了解这一部分就行了

发数据时,先写入发送数据寄存器,再由发送数据寄存器转入发送位移寄存器.

收数据时,数据先存入接收移位寄存器,再由接受移位寄存器转入j接受数据寄存器.

三.软件实现

初始化结构体

波特率:调试助手波特率需要与串口初始化中的一致,这也是异步通信中保持数据准确的一个方法.

字长:可以是8位可以是16位(包含校验位)

停止位:设置停止位的位数

校验位:校验方式

模式:选择USART模式即可

硬件流:不使能硬件流控制

重要标志位

结合功能狂徒来看,串口里面比较重要的标志位就是这三个了

RXNE:接受数据寄存器不为空,代表数据来了,可以接受了

TC:发送完成

TXE:发送数据寄存器中的数据以及转入发送移位寄存器,代表有数据要发送出去

串口中断

串口的接受,发送都可以引起中断,按照需要编写.

改写fputc()函数

改写之后,可以直接通过printf再串口调试助手中打印出数据.

//重定义fputc函数 
int fputc(int ch, FILE *f)
{ 	
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
	USART1->DR = (u8) ch;      
	return ch;
}

将printf中的内容传入到usart的数据寄存器中将数据通过串口发送出来

自定义的关于单个字节和多个字节的打印方式

void single_data(uint8_t data)
{
	USART_SendData(USART1, data);
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
void str_data(char * str)
{
	uint8_t k = 0;
	while(*(str+k)!= '\0')
	{
	single_data(*(str+k));
	k++;
	}
	while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
}

多个字节的发送方式起始就是多次发送单个字节而已.这里传入的参数都是8位的,如果再初始化的时候配置字长为16位的话,这里就改成16位.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值