STM32_基础入门(九)_串口通讯实验详解

本文详细介绍了基于STM32的串口通讯实验,包括串口调试助手的使用、自定义数据接收协议的中断函数理解和代码解析。实验通过串口助手发送数据,单片机接收并返回,强调了USART-FLAG-TXE和USART-FLAG-TC标志位在数据发送过程中的不同意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持续关注阿杰在线更新保姆式笔记~~坚持日更

目录

一、实验内容梳理

二、对于串口中断函数(自定义数据接收协议)的理解

三、代码区

对main函数的理解

USART-FLAG-TXE与USART-FLAG-TC标志位


一、实验内容梳理

首先结合串口调试助手对实验进行说明,以便后续结合代码熟悉整个流程。整个实验其实就是通过串口调试助手单片机发送数据,然后单片机接收到的数据返回给上位机并加以显示

简单来串口调试助手说其实就是用于上位机和下位机通信用的一个桥梁软件,功能主要有两个这也是本实验的两个步骤:

  1. 人工发送数据给单片机处理,即通过串口调试助手的下方窗口编辑数据,然后点击发送按钮,就能发送数据给单片机;
  2. 接受单片机发送的数据显示给你看,即通过串口调试助手上方窗口,将单片机发回给上位机的数据进行显示;

 

关于串口调试助手,还应知道:

  • 发送英文字符需要用一个字符即8位,发送汉字需要两个字符即16位,如上图,发送汉字“宋”实际是发送“CB(1100 1011)CE(1100 1110)”而发送英文字符S实际是发送“53(0101 0011)”,本质上没有太大区别;
  • 勾选了下方“发送新行”后,XCOM就会再你输入的需要发送的数据后自动加上一个回车(0X0D+0X0A),如果不勾选则我们在手动输入完“宋S”后还需敲一个回车键只有这样点击发送后,调试助手上方窗体才能将其显示,这是因为我们在程序的串口中断中自定义了一个数据接收协议,即只有当接受的数据以回车结尾(0X0D+0X0A),串口才认可数据接受完毕。

二、对于串口中断函数(自定义数据接收协议)的理解

正点原子的例程中通过语句USART_ITConfig(USART1, USART_IT_RXNE, ENABLE)开启相关中断,当读数据寄存器非空,即单片机一接收到数据时,便会触发串口1的中断函数。

改协议的核心是定义了一个16位的变量USART_RX_STA,该变量的0-13位用于存储接收到的数据,最后的14、15两位作用在于,当14、15位依次接收到0x0d和0x0a时,依次将这两位置1,作为判断数据是否接收完的标志位。

以下是我看到的一个注释比较详细的代码,和一个实例,结合两者就可以很好的理解这个过程和代码,

.h文件

#define USART_REC_LEN  			200  	//定义最大接收字节数 200
#define EN_USART1_RX 			1		//使能(1)/禁止(0)串口1接收
	  	
extern u8  USART_RX_BUF[USART_REC_LEN]; 
//接收缓冲,最大USART_REC_LEN个字节.末字节为换行符 
extern u16 USART_RX_STA;        //接收状态标记	
void USART1_IRQHandler(void)                	//串口1中断服务程序
{
	u8 Res;     //定义unsigned char型字符Res
 
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  
		//接收中断(接收到的数据必须是0x0d 0x0a结尾)
		//这里判断发送接收完成的依据就是串口数据0x0d 0x0a,
		//0x0d是CR(carriage return)回车的意思,光标回到最左边,
		//0x0a是LF(line feed)换行的意思,光标到达下一行,
		//但是在PC上回车和换行是在一起的就是按下回车按键
		//当然可以更改程序使用其他进行判断例如使用0x2a也就是*进行结束判断
	{
		Res =USART_ReceiveData(USART1);//(USART1->DR);	
		//读取接收到的数据,存放到变量Res中
		if((USART_RX_STA&0x8000)==0)
			//判断接收是否未完成
			//接收完成未清除标志位,还是会不断进入到接收中断,所以使用标志进行判断,
			//当接收完成便不会跳入到判断,从而不执行任何指令,空等待
			//使用条件判断是否已经接收完数据,这里判断接收完的依据就是收到了0x0a;
			//具体判断在后面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值