STM32F4 串口简单的阻塞式发送,阻塞式接收,中断式接收

STM32串口通信包括三种方式,阻塞模式、中断方式与DMA方式。

注:本笔记根据原文链接 https://blog.csdn.net/weixin_43646005/article/details/104616635,进行修改和总结。

一、以下为阻塞方式收发+中断接收

 //定义变量
#define RX_MAX_COUNT           1000  //串口最大字节数
uint8_t txbuf[50];
__IO uint8_t rxbuf[RX_MAX_COUNT]={0};
//main函数里:
    memcpy(txbuf,"串口发送测试\r\n",50);
    HAL_UART_Transmit(&husart_debug, txbuf, strlen((char *)txbuf), 1000);
    memcpy(txbuf,"串口接收测试\r\n",50);   
    HAL_UART_Transmit(&husart_debug, txbuf, strlen((char *)txbuf), 1000);
	
  int n = 1;
  while (n)
  {		
    HAL_UART_Receive(&husart_debug, (uint8_t *)rxbuf, 100, 3000); 
    if (rxbuf[0] == 'g' && rxbuf[1] == 'o')
    {
      strcpy((char *)txbuf, "接收go成功\r\n开始下面的测试\r\n");
      HAL_UART_Transmit(&husart_debug, txbuf, strlen((char *)txbuf), 1000);
      HAL_UART_Receive_IT(&husart_debug, (uint8_t *)rxbuf, 5);  //开启中断接收
      n = 0;
      break;
    }
    else
    {
      strcpy((char *)txbuf, "接收失败,重新发送\r\n");
      HAL_UART_Transmit(&husart_debug, (uint8_t *)&txbuf,strlen((char *)txbuf), 1000);
    }

记得在it.c中添加中断服务函数,才能进入回调函数

//stm32f4xx_it.c中

//名字是usart.h中宏定义的:#define DEBUG_USARTx_IRQHandler     USART1_IRQHandler
void DEBUG_USARTx_IRQHandler(void)  
{
  HAL_UART_IRQHandler(&husart_debug);  //husart_debug是句柄

}
//回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart==&husart_debug)                //判断是指定的调试串口
	{		
//  if (rxbuf[0] == 'u', rxbuf[1] == 'p')
		  if (rxbuf[0]== 'u' && rxbuf[1] == 'p')
  {
    printf(">>  LED1_OFF; ------    LED1灭\r\n");
  }
//  if (rxbuf[0] == 'd', rxbuf[1] == 'o', rxbuf[2] == 'w', rxbuf[3] == 'n')
		  if (rxbuf[0]=='d'&& rxbuf[1] == 'o'&& rxbuf[2] == 'w'&& rxbuf[3] == 'n')
  {
    printf(">>  LED2_OFF; ------    LED2灭\r\n");
  }
  HAL_UART_Transmit(&husart_debug, (uint8_t *)rxbuf, 5, 100);
  HAL_UART_Receive_IT(&husart_debug, (uint8_t *)rxbuf, 5);
}
	}

运行结果:

发送go:

接着发送down:没反应

 继续发送down:

 因为接收这里HAL_UART_Receive_IT(&husart_debug, (uint8_t *)rxbuf, 5); 是接收5个字符。可以自行进行修改。

二、

总结:HAL_UART_Transmit();HAL_UART_Receive();可以一次性收发多个数据。。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值