如何接收串口数据_UART IDLE 中断使用接收不定长串口数据
前言
在串口通信应用中,我们常使用接受和发送中断,相信大家都不陌生。这里有个非常有用的中断可能被大家所忽略,即总线IDLE中断。当一帧数据传输结束之后,总线会维持高电平状态,此时,就可以触发MCU的IDLE中断。在本文中,将介绍使用该中断来进行不定长串口数据接收的办法。通过该中断,可以省却很多用于检测数据传输是否完成的判断动作。
实验环境
STM32F411RE-NUCLEO
STM32CubeMX
总线状态分析
下图是发送0xAA 0x55的所抓取到的波形。从图中我们可以看到在发送该帧之前和之后,数据线处于IDLE的状态。在该帧中,字节与字节之间,没有IDLE状态出现,即不会出现IDLE误触发的情况。
不定长数据接收
本次制作的工程是基于HAL库。在原生的HAL库中,并没有集成IDLE中断的处理。所以,在本文我们介绍的方法中,需要修改一些库文件来实现。
使用STM32CubeMX生成实验工程
工程的配置如下图:
1.系统始终配置为100MHz
2.配置USART2为Asynchrones,管脚配置为PA2,PA3。
3.USART2参数:9600Bits/s, 8bits, None, 1Stop
为了方便打印接收到的相关信息,需要对生成的工程做如下修改来映射print函数。
main.c-声明
main.c-Code
修改工程代码
增加接收Buffer
main.c
stm32f4xx_hal_uart.c
在接收函数中使能IDLE中断
stm32f4xx_hal_uart.c HAL_UART_Receive_DMA()函数
处理IDLE中断
stm32f4xx_hal_uart.c HAL_UART_IRQHandler ()函数
接收完成处理(IDLE产生,一帧数据传输完成)
stm32f4xx_hal_uart.c HAL_UART_AbortReceive_IT ()函数
main.c
使能接收
main.c
实验结果
使用串口调试串口,通过STLINK的虚拟串口发送数据,MCU会返回接收多少个字节的数据,并将接收到的数据打印出来。下图是发送0xAA 0x55的实验结果。
小结
IDLE作为指示总线空闲状态的中断,合理的使用能够很大程度的节省代码程序设计工作量。这里只是做个简单示范,抛砖引玉,实际应用中希望大家可以灵活使用满足所需。
如何接收串口数据_UART IDLE 中断使用接收不定长串口数据相关推荐
- CubeMX STM32串口1DMA使用IDLE中断接收、串口2DMA接收DMX512信号(标准)
CubeMX STM32串口1DMA使用IDLE中断接收.串口2DMA收发DMX512信号(标准) DMX512协议 CubeMX 代码部分 串口1 串口2 外部中断 定时器1 总结 DMX512协议 ...
- 机器之心助推长三角建设数据智能产业新高地:2018长三角数据智能盛典
2018 年 12 月 20 日,「数聚上海·智创未来--2018 上海数据智能行业盛典」在上海市北高新成功举办.此次盛典由上海市经济和信息化委员会.上海市科学技术委员会指导,上海大数据联盟主办,上海 ...
- bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
1 基础知识点 1.1 串口中断种类 串口中断属于STM32本身的资源,不涉及到FreeRTOS,但可与FreeRTOS配合使用. 串口接收中断 中断标志为:USART_IT_RXNE,即rx non ...
- 【DSP】TMS320F28035串口SCI不定长字节数据FIFO收发,数据帧格式:0XFD(帧头)+数据+0XFC 0XFD(帧尾)
/**********************************************************************************自定义串口接收协议,单字节接收中断 ...
- 串口IDLE空闲中断+DMA实现接收不定长数据基于stm32cubemx
引言:对于串口接收一些不定长的数据,必须面对一个问题:怎么判断一帧数据接收是否完成?通常使用RXNE非空中断配合简单的数据协议,在数据中加入帧头.帧尾,在程序中判断是否接收到帧尾来确定数据接收完毕,因 ...
- STM32使用串口IDLE中断的两种接收不定长数据的方式
现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE中断一次只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE空闲中断的方式接收一帧数据,方法如下: 方法1: ...
- stm32的rxne和idle中断_STM32 HAL CubeMX 串口IDLE接收空闲中断+DMA
历程详解 详解包括: 中断原理讲解 例程流程详解 库函数分析详解 对应寄存器介绍 对应函数介绍 对应注释详解 本篇文章提供两种方法: 一种是 :IDLE 接收空闲中断+DMA 一种是: IDLE 接收 ...
- STM32单片机串口空闲中断+DMA接收不定长数据
在上一篇文章STM32单片机串口空闲中断接收不定长数据中介绍了利用串口空闲中断接收不定长数据,这种方式有一个问题就是串口每接收到一个字节就会进入一次中断,如果发送的数据比较频繁,那么串口中断就会不停打 ...
- STM32单片机串口空闲中断接收不定长数据
在使用单片机的串口通信功能时,常用的接收数据方法是通过固定的字节数来判断一帧数是否发送完成,或者是通过固定的结束标志位来表示一帧数据发送完成.但是有时候会遇到发送的数据长度不固定,也没有固定的结束标志 ...
最新文章
- 皮一皮:现在知道公司老说信息完整的重要性...
- K近邻算法基础:KD树的操作
- Socket.IO聊天室~简单实用
- art-template入门(八)之选项
- ubuntu麒麟下安装并启用搜狗输入法
- win7系统还原在哪​
- idea项目application.properties文件注释显示unicode编码
- 在Lotus Notes设置邮件转发
- Spring Boot/Cloud 背后豪华的研发团队
- 第一台计算机 采用工 作原理,第1讲计算机工作原理模版课件.ppt
- IDEA API文档的导出方式
- win10u盘被写保护怎么解除_win10系统中u盘被写保护怎么解除
- Linux下wine最新版源码编译
- desc查询表字段信息
- Fusion 360 最新动态 - 温度场和热应力分析
- 数论 判断素数:普通素数判别 线性筛 二次筛法求素数 米勒拉宾素数检验
- 八字易经算法之用JAVA实现完整排盘系统_八字易經演算法之用JAVA實現完整排盤系統 | 學步園...
- dismiss ios pop效果_iOS ~ ViewController的Push,Pop和Present,Dismiss转场动画
- Problem:跳房子
- ANSYS workbench的模态分析基本原理和步骤
热门文章
- Linux下如何自己编译源代码(制作成可以安装的.deb文件)
- kickStart脚本
- SQL Server replication requires the actual server name to make a connection to the server.错误解决...
- [转]关于java 内存泄露
- 使用WCF建立起Silverlight客户端与服务端的桥梁
- leetcode1254. 统计封闭岛屿的数目(dfs)
- 分布式 知乎 github_如何使用GitHub本机功能来帮助管理中型分布式团队
- 小程序 graphql_GraphQL应用程序中的五个常见问题(以及如何解决)
- react 交互_如何在React中建立动画微交互
- Centos下Nodejs+npm环境-部署记录