STM32-02-串口接收

Cubemx配置

跳过基础配置

串口配置

使能串口中断
在这里插入图片描述

代码部分及说明

代码

参数定义:

/***************************串口相关******************************/

uint8_t RxBuff[1];      //进入中断接收数据的数组
uint8_t Data_Uartbuff[5000]; //保存接收到的数据的数组
uint8_t Data_Uart[5000];
int RxLine=0;           //接收到的数据长度
uint8_t Rx_flag=0;					//接受到数据标志
uint8_t Data_Uartflag;    //需要使用的数据更新成功标志
int Data_Uartcnt=0;//数据的长度
/****************************************************************/

串口中断回调:
需要在头文件 #include “string.h”

/**********************串口中断回调******************************/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart->Instance == huart1.Instance)
	{
	    static uint8_t step=0;
	    switch(step)	
	    {
	    	case 0:  //开始检查头帧
	    		if(RxBuff[0]=='#')
	    		{					
	    				step++;
	    				RxLine++;
	    				Data_Uartbuff[RxLine-1]=RxBuff[0];					
	    		}
	    	break;
	    	case 1:
	    		if(RxBuff[0]=='!')//判断结尾帧
	    		{	
	    			 //printf("ok2\r\n");
	    			 RxLine++;
	    			 Data_Uartbuff[RxLine-1]=RxBuff[0];
	    			 Data_Uartcnt = RxLine;
	    			 //printf("cnt的长度%d",Data_Uartcnt);
	    			 step=0;
	    			 RxLine=0;
	    			 Rx_flag=1;
	    		}
	    		else //接收数据
	    		{
	    				RxLine++;
	    				Data_Uartbuff[RxLine-1]=RxBuff[0];
	    				//printf("ok3");
	    		}
	    	break;			
	    }
	    if(Rx_flag==1)//转移Buff中的数据
	    {		
	    		memcpy(Data_Uart,Data_Uartbuff,Data_Uartcnt);
	    		memset(Data_Uartbuff,0,Data_Uartcnt);
	    	  Rx_flag = 0;
	    		Data_Uartflag=1;
	    }
	    HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1);
	    RxBuff[0]=0;
   }
}

串口处理函数封装:

/**********************串口处理函数******************************/
void Uart_Deal(void)
{
	 if(Data_Uartflag==1)//串口数据处理
		{ 	
				Data_Uartflag = 0;
				HAL_UART_Transmit(&huart1,(uint8_t *)Data_Uart,Data_Uartcnt,0xffff);
				if(Data_Uart[1]=='1')
					HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
			  printf("\r\n");
		}
}

while(1)中

Uart_Deal();

while(1)之前初始化

HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuff, 1); //打开串口中断接收	

说明

串口数据以#开始,以!结束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值