串口不定长接收

一、保留接收区和开启接收的语句
  

    uint8_t buffer[5];
    HAL_UART_Transmit_IT(&huart1,buffer,3);

二、写入开启空闲中断的语句
  

 __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);

三、找到串口的中断服务函数(由于HAL库没有提供空闲中断的回调函数,故我们需要在串口的中断服务函数中自己编写)

四、首先我们需要判断一下我们产生的是不是空闲中断,判断语句:
  

  if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
    {
    
    }

    在里面写入清楚中断标志位的语句
  

 __HAL_UART_CLEAR_IDLEFLAG(&huart1);    

五、写入停止接收DMA接收的语句
  

 HAL_UART_DMAStop(&huart1);
    //然后我们需要计算一下我们输入了多少字节
    uint8_t len=3-__HAL_DMA_GET_COUNTER(&huart1.hdmarx);
    //然后通过DMA把接收到的数据发送出去
    HAL_UART_Transmit_DMA(&huart1,buffer,len);
    //然后开启DMA准备第二次的接收
    HAL_UART_Receive_DMA(&huart1);

六、编译运行

版权声明:本文为CSDN博主「SUNNAN_66」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/SUNNAN_66/article/details/122862096

生成海报
点赞 0

SUNNAN_66

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

4.8 51单片机-PCF8591(ADC/DAC)转换芯片

4.8 PCF8591(ADC/DAC)转换芯片 4.8.1 原理图 当前实验板上没有PCF8591芯片,这里采用外接模块的形式使用。 图4-8-1 PCF8591模块实物图 图4-8-2 原理图 通过原理图得到的重要信息:

基础实验——485传感器修改地址

RS-485仅是一个电气标准,描述了接口的物理层,像协议、时序、串行或并行数据以及链路全部由设计者或更高层协议定义。 RS-485定义的是使用平衡(也称作差分)多点传输线的驱动器&#xff

stm32+AMG8833+VS2015 C#上位机图像显示

设计思路 本人在电场工作,于是想做一款热成像智能控制小车,通过网上查找资料,发现AMG8833这款芯片可以说是物美价廉,基本能够实现想要的功能。因为我有一定的单片机开发基础&#xff0c