多串口重定向发送和接收

重定向发送头文件定义:

#include "stdio.h"
#include "string.h"
#include <stdarg.h>
	

 代码:(放在usart.c)

void Uart_printf(UART_HandleTypeDef *huart,char *format, ...)
{
  char buf[512]; //定义临时数组,根据实际发送大小微调
 
  va_list args;
  va_start(args, format);
  uint16_t len = vsnprintf((char *)buf, sizeof(buf), (char *)format, args);
  va_end(args);
  HAL_UART_Transmit(huart,(uint8_t *)buf,len,1000);

}

 记得在(放在usart.h)声明下函数

/* USER CODE BEGIN Prototypes */
void Uart_printf(UART_HandleTypeDef *huart,char *format, ...);

/* USER CODE END Prototypes */

使用例程:Uart_printf(&huart2,"data = %d",13); 

串口接收字符且进行判断

定义接收缓存变量

uint8_t Uart2_Data;  //串口2接收缓存量

/* 回调函数 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

 if(huart->Instance == USART2)
 {
	 if(Uart2_Data=='A')
	 {
            //当接收到'A's时要做的放这
	 }
     HAL_UART_Receive_IT(&huart2,&Uart2_Data,1); 
 }
  }
}

使用时要在主函数初始化下串口接收:

	//开启串口2接收
	HAL_UART_Receive_IT(&huart2,&Uart2_Data,1);

串口接收字符串且进行判断

const char String1[8] = "kaishi";
const char String2[11] = "chushihua";
const char String3[9] = "xianshi";
 
 
#define RXBUFFERSIZE  256     //最大接收字节数
char RxBuffer[RXBUFFERSIZE];   //接收数据
uint8_t aRxBuffer;			//接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0;		//接收缓冲计数

串口接收中断回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
         if(huart->Instance == USART1)
    {
		RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
		if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位
		{
			Uart1_Rx_Cnt = 0;
			if(strstr((const char *)RxBuffer,String1) != NULL)
			{
                //当接收到数据和String1一样时,需要实现的写在这
 
			}
			memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
		}
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
    }
 
 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值