stm32基于HAL库 串口全讲解

首先关于cubmx配置:

链接: 串口配置.
以及我觉得比较好的串口讲解
HAL串口讲解

基础操作

上位机发送数据给单片机,单片机收到数据后,又发送给上位机。
这整个通信过程在串口助手中体现出来:
在这里插入图片描述

在这里插入图片描述

while (1)
  {
    /* USER CODE END WHILE */
   if( HAL_UART_Receive(&huart1,RecBuf,5,100) == HAL_OK )
	 {
		 HAL_UART_Transmit (&huart1 ,RecBuf,5,100); //把接收到的字符原样返回
	 }
    /* USER CODE BEGIN 3 */
  }

进阶操作1

重定向printf
链接: 重定向printf的原理.

/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{
	HAL_UART_Transmit (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	//采用轮询方式发送一个字节的数据,没有发送成功就一直等待
	return ch;
}
int fgetc(FILE *f)
//int fgetc(int ch, FILE *F)
{
	uint8_t ch;
	HAL_UART_Receive (&huart1 ,(uint8_t *)&ch,1,HAL_MAX_DELAY );
	return ch;
}
/* USER CODE END 4 */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
#define RXBUFFERSIZE  256
char RxBuffer[RXBUFFERSIZE];
/* USER CODE END PTD */
  while (1)
  {
		printf ("123 %d",c);  //就可以像c语言那样通过串口打印出数据啦
		HAL_Delay(1000);
}

链接: scanf()连续接收多个字符出现的问题.
在这里插入图片描述
当我们输入y,串口会接收到如下的数据:
在这里插入图片描述
而如果去掉上面的两行getchar()代码,就会
在这里插入图片描述
原因在链接里说的很清楚啦,我这里就提供一个思路,不必多言。

进阶操作2(可忽略)

GUJIANKU
链接: USART_SendData的使用
大家可以关注下stm32固件库的使用,里面又很多封装好的函数的介绍,当我们想写哪方面的程序时,就可以去查阅一下相关函数。
在这里插入图片描述

中断回调函数

这个写出来,接收中断就没有成功过
在这里插入图片描述
在这里插入图片描述
这里LED0也没有亮


下面是核心代码,有没有大佬帮忙看看什么问题qwq感激不尽

  /* USER CODE BEGIN 2 */
	printf("发送信息ing\r\n\r\n");
	printf("发送信息ing\n请输入10个字符\r\n\n");
	HAL_UART_Receive_IT (&huart1 ,RxBuffer ,LENGTH);
  while (1)
  {
		//printf ("666%d %d \r",c,a);
		 
	  	//HAL_Delay(1000);
  if(RxFlag )
	{

		RxFlag = 0;
		printf("接收成功");
		HAL_UART_Transmit (&huart1 ,RxBuffer ,LENGTH,0xff);
		while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
	}
		
  }
/* USER CODE BEGIN 4 */
void HAL_UART_Rxcpltcallback(UART_HandleTypeDef *huart)
{
 if(huart->Instance  == USART1 )
 {
	 	HAL_GPIO_TogglePin (GPIOB ,GPIO_PIN_5);
		HAL_Delay (300);
		HAL_GPIO_TogglePin (GPIOB ,GPIO_PIN_5);
	 RxFlag = 1;
	 HAL_UART_Receive_IT (&huart1 ,(uint8_t *)RxBuffer ,LENGTH );//使能接收中断
 }
}
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值