栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【STM32】串口接收任意字符串

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【STM32】串口接收任意字符串

目录
  • 前言
  • cube配置
  • usart.h:
  • usart.c
  • main:
  • 效果

前言

之前写了一篇STM32hal库串口中断接收任意字符

实际上是不完美的,他接收到换行符就完蛋了。
花了点时间深入研究了一下hal库的串口中断函数,发现他其实是不完美的,有一些BUG。
所以查了资料,找了很久,才找到这个博主的文章:
STM32CubeMX5.1.0使用教程,以STM32L431为例(三):串口通信

cube配置

设置串口波特率和中断

生成工程文件,去hal库的 "stm32l4xx_it"里注释掉串口中断函数(官方有问题,我们自己写!)

usart.h:

usart.h:

#ifndef __USART_H__
#define __USART_H__

#ifdef __cplusplus
extern "C" {
#endif


#include "main.h"





extern UART_HandleTypeDef huart1;


	
extern uint8_t   buff[1024];
extern uint16_t  buff_len;
extern uint8_t   buff_Flag;
	


void MX_USART1_UART_Init(void);


void USART1_IRQHandler(void);
void USART1_IT_Enable(void);


#ifdef __cplusplus
}
#endif

#endif 



usart.c

usart.c里面添加:


uint8_t   buff[1024];
uint16_t  buff_len=0;
uint8_t   buff_Flag=0;
void USART1_IT_Enable(void)
{
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_ERR);
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
}
 
void USART1_IRQHandler(void)
{
  
  uint8_t Res=0;
  
     //HAL_UART_IRQHandler(&huart1);   //注释这条语句,不使用HAL库的回调处理
  
    
    //判读是否为接收中断
    if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE)!=RESET))
    {
        HAL_UART_Receive(&huart1,&Res,1,1000);
        buff[buff_len]=Res;
        buff_len++;
    }
    //判读是否为溢出中断
    if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_ORE)!=RESET))
    {
        __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_OREF);
    }
    //判读是否为接收空闲中断
    if((__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET))
    {
        __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_IDLEF);		//清除中断标志
        buff_Flag=1;	//直到没数据才把标志位至1,主函数才可以判断到
    }		
  
}





main:
int main(void)
{
  

  

  

  
  HAL_Init();

  

  

  
  SystemClock_Config();

  

  

  
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  
 USART1_IT_Enable();  //使能一些中断
  

  
  
  while (1)
  {
	if(buff_Flag==1)
    {
      HAL_UART_Transmit(&huart1 ,buff,buff_len,0xffff);
      buff_Flag=0;
      buff_len=0;   
    }
    

    
  }
  
}
效果



单片机用的是STM32L431,hal库全部通用,工程文件:https://download.csdn.net/download/weixin_51102592/36764240?spm=1001.2014.3001.5503

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511531.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号