STM32H7系列教程(5)UART串口通信

文章中若有错误,请在评论区留言,谢谢大家

STM32H7系列教程(5)UART串口通信

设置STM32cubeMX

选择异步通信Asynchronous
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

查看生成的代码

在这里插入图片描述在这里插入图片描述

HAL_UART_Transmit(); 			//串口发送数据
HAL_UART_Receive(); 			//串口接收数据
HAL_UART_Transmit_IT();		 //串口中断模式发送数据
HAL_UART_Receive_IT();		 //串口中断模式接收数据
HAL_UART_Transmit_DMA();	 //串口DMA模式发送数据
HAL_UART_Receive_DMA();		 //串口DMA模式接收数据

UART串口发送/接收

重定义print函数

重定义函数前需要开启MicroLIB
在这里插入图片描述

#include <stdio.h> //添加头文件
extern UART_HandleTypeDef huart8;   //声明串口

将下面的函数添加到mian.c文件中

/* USER CODE BEGIN 0 */

/**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
  */
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart8, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
 
/**
  * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
  */
int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart8, &ch, 1, 0xffff);
  return ch;
}

/* USER CODE END 0 */

编写代码

  /* USER CODE BEGIN WHILE */
  while (1)
  {
  		printf("Uart8 Test!\n\r");		
		HAL_Delay(1000);	
    /* USER CODE END WHILE */

将代码上传到开发板,并打开串口助手查看结果
在这里插入图片描述

中断接收

//在mian.c文件中添加
#define RXBUFFERSIZE  256      //最大接收字节数
char RxBuffer[RXBUFFERSIZE];   //接收数据
uint8_t aRxBuffer;						 //接收中断缓冲
uint8_t Uart8_Rx_Cnt = 0;			 //接收缓冲计数

//在while循环前启动串口中断
	HAL_UART_Receive_IT(&huart8, (uint8_t *)&aRxBuffer, 1);	
	
/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* 防止未使用的参数编译警告 */
  UNUSED(huart);
  /* 注意: 需要回调时,不应修改该函数、
           可在用户文件中实现 HAL_UART_TxCpltCallback */ 
	if(Uart8_Rx_Cnt >= 255)  //溢出判断
	{
		Uart8_Rx_Cnt = 0;
		memset(RxBuffer,0x00,sizeof(RxBuffer));
		HAL_UART_Transmit(&huart8, (uint8_t *)"数据溢出", 10,0xFFFF); 	       
	}
	else
	{
		RxBuffer[Uart8_Rx_Cnt++] = aRxBuffer;   //接收数据转存
		if((RxBuffer[Uart8_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart8_Rx_Cnt-2] == 0x0D)) //判断结束位
		{
			printf("Uart8收到的数据:\n\r");
			HAL_UART_Transmit(&huart8, (uint8_t *)&RxBuffer, Uart8_Rx_Cnt,0xFFFF); //将收到的信息发送出去
            while(HAL_UART_GetState(&huart8) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
			Uart8_Rx_Cnt = 0;
			memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
		}
	}

	HAL_UART_Receive_IT(&huart8, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
}


/* USER CODE END 4 */

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值