通用同步异步收发器(USART)既是串口,可以与电脑上的串口助手连接,是调试单片机的重要方式。双向通信至少需要2个引脚:接受数据输入(RX)和发送数据输出(TX)。

首先在STM32CubeMX中配置好使用串口的基本参数,开启串口中断,并将要是用的库设置为LL库:

自动生成好基础代码后,添加如下代码开启接收缓冲区Rx非空中断与空闲中断:

 LL_USART_EnableIT_RXNE(USART2);LL_USART_EnableIT_IDLE(USART2);

RXNE为接收缓冲器Rx非空标志,置1表明接收到了数据(1个字节),产生中断;IDLE为空闲标志,置1表明当前数据接收完毕(1帧数据),产生中断。接收不定长信息:

char data[20];
uint8_t Rflag = 0;
uint8_t Rnum = 0;// 我们将接收到的数据存入字符串数组data[]中,Rnum表明数据长度,Rflag表示接收状态,=1即接收完毕
void USART2_IRQHandler(void)
{/* USER CODE BEGIN USART2_IRQn 0 */// 空闲中断,表明接收到了1帧所有的数据if(LL_USART_IsActiveFlag_IDLE(USART2)){// 清楚中断标志位LL_USART_ClearFlag_IDLE(USART2);data[Rnum] = '\0';Rflag = 1;Rnum = 0;}// Rx非空中断,表明接收到了一个字节// 读取Rx可自动清除中断标志位if(LL_USART_IsActiveFlag_RXNE(USART2)){// 如果数组长度大于设置的data最大长度,直接停止接收if(Rnum > 18){data[19] = '\0';Rflag = 1;  // stop receiveRnum = 0;  // wait for the next data}if(Rflag == 0){data[Rnum] = LL_USART_ReceiveData8(USART2);Rnum ++;}}WRITE_REG(USART2->RQR, USART_RQR_RXFRQ);/* USER CODE END USART2_IRQn 0 *//* USER CODE BEGIN USART2_IRQn 1 *//* USER CODE END USART2_IRQn 1 */
}

相关LL库函数定义如下:

/* Legacy define */
#define LL_USART_EnableIT_RXNE  LL_USART_EnableIT_RXNE_RXFNE/*** @brief  Enable RX Not Empty and RX FIFO Not Empty Interrupt* @note   Macro IS_UART_FIFO_INSTANCE(USARTx) can be used to check whether or not*         FIFO mode feature is supported by the USARTx instance.* @rmtoll CR1        RXNEIE_RXFNEIE  LL_USART_EnableIT_RXNE_RXFNE* @param  USARTx USART Instance* @retval None*/
__STATIC_INLINE void LL_USART_EnableIT_RXNE_RXFNE(USART_TypeDef *USARTx)
{SET_BIT(USARTx->CR1, USART_CR1_RXNEIE_RXFNEIE);
}/*** @brief  Enable IDLE Interrupt* @rmtoll CR1          IDLEIE        LL_USART_EnableIT_IDLE* @param  USARTx USART Instance* @retval None*/
__STATIC_INLINE void LL_USART_EnableIT_IDLE(USART_TypeDef *USARTx)
{SET_BIT(USARTx->CR1, USART_CR1_IDLEIE);
}/*** @brief  Read Receiver Data register (Receive Data value, 8 bits)* @rmtoll RDR          RDR           LL_USART_ReceiveData8* @param  USARTx USART Instance* @retval Value between Min_Data=0x00 and Max_Data=0xFF*/
__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
{return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
}

STM32LL库——USART中断接收不定长信息相关推荐

  1. STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式)

    STM32使用串口空闲中断接收不定长数据帧-USART_IT_IDLE使用(不使用DMA方式) 前言 串口空闲中断介绍 清中断方法 串口中断处理函数 串口中断用到的全局变量定义 串口初始化(使能接收中 ...

  2. STM32 HAL库 串口DMA接收不定长数据

    STM32 HAL库 串口DMA接收不定长数据 整体思路:我是用的CUBEMX软件生成的工程,使能了两个串口,串口2用来接收不定长的数据,串口1用来发送串口2接收到的数据:串口2我找了一个UBLOX卫 ...

  3. STM32单片机串口空闲中断接收不定长数据

    在使用单片机的串口通信功能时,常用的接收数据方法是通过固定的字节数来判断一帧数是否发送完成,或者是通过固定的结束标志位来表示一帧数据发送完成.但是有时候会遇到发送的数据长度不固定,也没有固定的结束标志 ...

  4. stm32串口空闲中断接收不定长数据

    串口空闲中断接收不定长数据 空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发 ...

  5. 第九章 AT32F403A基于V2库串口 dma接收不定长数据

    目录 概述 硬件 DMA 软件 流程 初始化 初始化代码: 中断服务函数: DMA1通道5设置函数:(重新使能通道) DMA1通道4发送函数:(设置dma长度和内存地址) 测试 最后 概述 本文主要是 ...

  6. bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用

    1 基础知识点 1.1 串口中断种类 串口中断属于STM32本身的资源,不涉及到FreeRTOS,但可与FreeRTOS配合使用. 串口接收中断 中断标志为:USART_IT_RXNE,即rx non ...

  7. STM32H7 DMA USART空闲中断接收不定长数据

    1.关键设置 2.代码 2.1 bsp_usart.h /*********************************************************************** ...

  8. STM32单片机串口空闲中断+DMA接收不定长数据

    在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打 ...

  9. openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

    编者注: 单片机串口接收不定长数据时,必须面对的一个问题为:怎么判断这一包数据接收完成了呢?常见的方法主要有以下两种: 1.在接收数据时启动一个定时器,在指定时间间隔内没有接收到新数据,认为数据接收完 ...

最新文章

  1. 【ORACLE】 安装需要注意的问题(一)
  2. 在android开发中使用multdex的方法-IT蓝豹为你整理
  3. bloomberg用法 固定收益_干货 | 日语高考高频考点:助词を的用法
  4. 解决 webpack-dev-server 不能自动刷新的问题
  5. Linux下运行黑客帝国屏保
  6. java做一个客房管理系统定制_java实现客房管理系统
  7. 8瓶药水3只小白鼠问题
  8. Word生成目录后,前面还有摘要,怎么样让页码从正文第一页开始
  9. c语言 函数拟合,曲线拟合成Y=a*(X^b)+c*(X^d)函数 - 数学 - 小木虫 - 学术 科研 互动社区...
  10. 路由器桥接成功后,仍然没有网络
  11. 不规则物体抓取机械手机械臂
  12. SwiftUI 内功教程之Closures 09 闭包捕捉价值Capturing Values及经典用法
  13. 【小程序】微信小程序自定义导航栏及其封装
  14. 排位赛三B. Loan Repayment
  15. c语言限速编程,一种基于c语言的列车限速曲线计算方法和装置的制造方法
  16. win10系统使用VMware偶尔出现蓝盘的问题解决
  17. ERROR tool.ExportTool: Error during export: Export job failed!错误解析
  18. Ubuntu16.04安装搜狗拼音及可能出现的错误解决
  19. 计算机硕士可以入伍么,2021年下半年“征兵”已开始,大学生在校入伍好,还是毕业入伍好...
  20. 【二维码】二维码生成

热门文章

  1. word多个标题一不能显示在一页
  2. HTML 渲染组件出错,这个问题可以通过安装某个缺失组件来解决。您是否想要了解详细信息? 的解决办法
  3. cesium之三维场景展示篇
  4. Java练习:单选题
  5. 小米手机部和平台部组织调整 前者设参谋部、触控部
  6. Use After Free
  7. 用群晖筑建音乐之「家」
  8. 由浅入深,66条JavaScript面试知识点
  9. 忘记保存,如何利用历史版本找回丢失的Word文件
  10. 如何将低版本的CAD转换器转换成高版本