STM32串口之空闲中断

发布者:郑大大最新更新时间:2022-04-25 来源: eefocus关键字:STM32  串口  空闲中断 手机看文章 扫描二维码
随时随地手机看文章

背景

在做Nbiot的一个路灯项目,NBiot模块一般都是串口接口,使用AT指令集,对接中国移动onenet平台。先用串口助手去测试,流程测试OK之后需要在MCU上重新写一遍。一开始用的STC15系列的MCU,然后跟平台之间对接协议很多,代码量较大,所以换到了STM32F1系列的MCU。


在STC15MCU上面通过串口接收数据只能老老实实用接收中断来做,每接收一帧数据都需要判断帧头帧尾,一帧结束再处理。之前就听说过STM32串口上面有帧中断,一直没有用过,然后才有了这篇博客。


备注:一帧数据是表示一个或多个字节组成的有含义的字符串。

       

STM32串口 IDLE中断

IDLE其实是 空闲的意思。IDLE中断叫空闲中断,不叫帧中断。那么什么叫空闲,怎么定义空闲呢?在实际发送数据的时候,比如一串字符串,我们会采用如下方式发送


void uart1_putc(char dat){

SBUF = dat;

while (!TI);

TI = 0;

}

void uart1_puts_n(char *str){

while (*str)

uart1_putc(*str++);

}


void uart1_puts_n("i am handsome");


其实发送的两个字符之间间隔非常短,所以在两个字符之间不叫空闲。空闲的定义是总线上在一个字节的时间内没有再接收到数据。空闲中断是检测到有数据被接收后,总线上在一个字节的时间内没有再接收到数据的时候发生的。而总线在什么情况时,会有一个字节时间内没有接收到数据呢?一般就只有一个数据帧发送完成的情况,所以串口的空闲中断也叫帧中断。


要怎么开启帧中断呢?其实其他串口配置不用改变,只需要在开启串口接收中断的时候加上一句话就Ok。


USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接收中断

USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//开启串口空闲中断

然后中断函数如下


void USART2_IRQHandler(void){                //串口1中断服务程序

int clear;

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){  //字符接收中断(接收到的数据必须是0x0d 0x0a结尾)

USART2_RX_BUF[length++] = USART2->DR & 0x0FF;

}else if(USART_GetITStatus(USART2, USART_IT_IDLE ) != RESET){//空闲帧中断

//处理接受的数据

}

}


在普通中断的时候仅仅保存数据,在帧中断的时候需要执行相应处理函数。

如果没有帧中断,必须在接收中断中判断每一个接收数据与帧头帧尾是否相符,效率极低。

之前一直以为天下串口都一样,还是有很多细节的,可以提升不少效率!


改进办法

在原作者地下的评论中,发现有价值的评论,摘抄到此处。


空闲中断+串口DMA。不开接收中断,这样收到空闲中断了直接去处理DMA保存过来的数据。这样能减少CPU的负担。


使用空闲中断的话,如果连着发两帧数据给它,它有概率会当成一帧数据来接收,这是一个弊端


一问一答模式应该没问题。但是如果是主动发送模式,而且很多种数据排队发,总线就没有空闲时间的情况下,就无法进入idle中断了。比如数据量较大、时效性又很高时。你可以自己测试一下,按总线的最大能力来发送。比如波特率设置在9600,每帧数据构造到100个字节左右,每秒发7帧数据,应该就会出现了,评论区给出的解决办法。

关键字:STM32  串口  空闲中断 引用地址:STM32串口之空闲中断

上一篇:PWM里的控制
下一篇:STM32_管脚 部分映射和全映射

推荐阅读最新更新时间:2024-11-10 10:22

STM32 串口通信 printf方法
STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) 在STM32串口通信程序中使用printf发送数据,非常的方便。可在刚开始使用的时候总是遇到问题,常见的是硬件访真时无法进入main主函数,其实只要简单的配置一下就可以了。 下面就说一下使用printf需要做哪些配置。 有两种配置方法: 一、对工程属性进行配置,详细步骤如下 1、首先要在你的main 文件中 包含“stdio.h” (标准输入输出头文件)。 2、在main文件中重定义 fputc 函数 如下: // 发送数据 int fputc(int ch, FILE *f) { USART_SendData(USART1,
[单片机]
STM32’s I2C 硬件BUG引发的血案
下面的函数中有一个BUG, 也就是SR2不能用WHILE来轮询,而应直接读出.如下面代码段, 因此,在这里说的这是STM32的BUG其实是我的代码的错误: I2C2- DR = inerAddress ; while( (I2C2- SR1&Q_I2C_SR1_BIT_BTF)==0 ); I2C2- SR2; // 正解 2010-4-1 1:44,一直都不相信STM32 的I2C接口会存在问题,因为工作经验无数次告诉我,嵌入式系统设计中的99.999%的问题不会是由于MCU本身的设计问题所引起,绝大部分都是硬件工程师或软件工程师的某个设计缺陷所造成的. 这次的设计经历也不例外. 由于终于可以抽多点时间用于设计ST
[单片机]
合作共赢,生态共建是STM32的DNA
2019年4月26至27日,一年一度的意法半导体STM32峰会在深圳如期举行,根据最终统计,实际参会人数达到了3,500人,在线人数最高达5万人。 正是因为STM32在中国大获成功,因此此次峰会也得到了ST公司的重视。意法半导体总裁兼首席执行官Jean-Marc Chery是在刚刚开完季度投资者峰会后直接从欧洲赶赴深圳,同时前来的还有意法半导体数字、模拟、销售等全球或亚太区部门总监,不光是意法半导体在中国所召开的最顶级的峰会,同时也是MCU界的顶级盛会。 ST CEO在大会上发言 在此次峰会的主题演讲中,不光有来自意法半导体的高层分别介绍公司的愿景、单片机及传感器相关的产品规划,更重要的是邀请到了阿里巴巴集团副总裁、阿里
[单片机]
合作共赢,生态共建是<font color='red'>STM32</font>的DNA
一步步写STM32 OS【一】 序言
  一直想写个类似uCOS的OS,近段时间考研复习之余忙里偷闲,总算有点成果了。言归正传,我觉得OS最难的部分首先便是上下文切换的问题,他和MCU的架构有关,所以对于不同的MCU,这部分需要移植。一旦这个问题解决了,整个OS算是成功了一半了,当然,是对于简单的OS。   好了,要写一个OS,首先需要一个开发板和仿真器。我的开发板是STM32F4DISCOVERY,自带ST-LINK V2仿真器,板载MCU为STM32F407VGT6,支持FPU,32位ARM Cortex-M4F核,1024KB FLASH,192 KB RAM,总之很强大。对STM32其他系列,本OS几乎不需修改修改就可使用。开发环境为IAR for ARM 6
[单片机]
STM32 自定义延时函数
在stm32调试过程中加入一个延时,有两种方式:一种是纯计数方式,另一种是使用系统计数器的方式。 现使用系统计数器产生中断的方式实现,查阅STM32的编程手册可知,STM32有一个24bit的系统计时器,并有STK_CTRL、STK_LOAD、STK_VAL、STK_CALIB寄存器供读写配置。 而CORTEX_M3有提供了一些函数可以供我们调用来控制这几个寄存器。 在编写延时函数时需要的库函数: /** brief System Tick Configuration details Initializes the System Timer and its interrupt, and sta
[单片机]
<font color='red'>STM32</font> 自定义延时函数
stm32嵌入式操作系统的特点以及不足
STM32系列32位微控制器,基于ARM Cortex-M3处理器。它能支持32位广泛的应用,支持包括高性能、实时功能、数字信号处理,和低功耗、低电压操作,同时拥有一个完全集成和易用的开发。基于STM平台且满足实时控制要求的操作系统,有以下4种可供选择。分别为μC/OS-II、μClinux、eCos、FreeRTOS和都江堰操作系统(djyos)。下面分别介绍这五种嵌入式操作系统的特点及不足。 μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息 队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程
[单片机]
STM32 外部中断 易出错总结
一:触发方式 STM32的外部中断是通过边沿来触发的,不支持电平触发; 二:外部中断分组 STM32的每一个GPIO都能配置成一个外部中断触发源,STM32通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16组,STM32规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。 STM32分组和对应中断处理函数分配: 三:外部中断的配置过程 l配置触发源-GPIO 触发源为通过GPIO端口输入,所以,要配置GPIO的模式,输入方式,输入方式有以下几种: 1.GPIO_Mo
[单片机]
STM32如何配置外部中断STM32外部中断配置步骤
作为一款现代化的微控制器,STM32系列芯片在各种应用场合中广泛应用。其中最常见的应用是外部中断。本文将详细介绍如何在STM32中配置外部中断。 1.了解STM32的外部中断结构 在STM32中,外部中断是由NVIC(Nested Vector Interrupt Controller)进行控制的。STM32 的芯片可以选择4个方向上跌沿触发或上升沿触发的外部中断线。这些中断线可以通过中断线控制器(EXTI)进行设置,并可以绑定到不同的GPIO端口上,以实现具体的外部中断功能。在进行外部中断的初始化过程中,需要配置外部中断的触发方式、中断优先级和中断使能等参数。 2.配置外部中断的触发方式 STM32支持上升沿、下降沿和双边沿触发
[单片机]

推荐帖子

想搞自动驾驶小车,在B站看到一个成本300的,在犹豫中
最近在网上看资料,看到好多开源自动驾驶的资源,最接近我想搞得,就是看到一个B站的up主(业余造物liguanxi)自己搞的小小车,只有手掌大小,运行ROS1机器人系统,可进行基础的激光雷达2维建图与导航功能,可用手机APP辅助控制,还有雷达追踪,视觉识别与跟踪等扩展功能。项目的资料和开发经验都有开源。成本为何可以控制在300?其中一个原因是把部分的工作交给了电脑。一般来说,机器人系统ROS都需要在树莓派等微型电脑上运行,而我想要以最低的成本去完成这个项目,所以我将运行ROS系统电脑
蓝猫淘气 汽车电子
ce6.0 编译问题
编译CE6.0的工程文件时,总是会出现很多类似的错误,cs8900dbg_eboot.lib是不是在SOUCES里面路径设错了,如果错了,要怎样修改,哪位大哥帮帮我,NMAKE:U1073:don\'tknowhowtomake\'D:\\WINCE600\\platform\\smdk2443\\lib\\ARMV4I\\retail\\cs8900dbg_eboot.lib\'NMAKE.EXETargetExeFiles-i-cBUILDMSG=Stop
67067710 嵌入式系统
ARM白皮书——ARM Cortex-M3处理器简介(BY 周立功)
目录:第1章简介...................................................................................................................................11.1通过提高效率来提高性能...........................................................................................
chenzhufly 微控制器 MCU
EVC中如何设置裁剪矩形?
如题EVC中如何设置裁剪矩形?跟WIN32一样利用设备环境类进行操作。具体可以看汪兵的EVC高级编程及其应用的第二章,都有详细说明。
renguoquan 嵌入式系统
开关电源兴趣小组 第08次任务
  第07次思考题  1、本文图(05)和图(06)中如果开关管中电流波形和《开关电源设计第三版》图2.1波形(c)和波形(e)相同,你认为本文图(05)和图(06)整流电路中电感L1里面电流是连续工作状态还是断续工作状态?理由是什么?图(01)  电感L1中电流必定是连续工作状态。如果电感L1中电流断续,那么本文图(01)也就是《开关电源设计第三版》图2.1中开关管Q1和Q2电流波形将从0开始,也就是没有图中红色标注的初始电流,换句话说,红色部分长度为零。  2、请根
maychang 开关电源学习小组
您真的吃透了电阻的用法吗?转载
电阻作为一种最基本电子元器件,广泛运用在各种电路中,通常我们也认为电阻是用法最简单的一种电子元器件,除了功率外,没有过多的讲究。如果今天我说就这个小小的电阻,许多资深电子工程师都不一定真正懂得如何用,您相信吗?在选用电阻的时候,如果避除高频电路的特殊应用,一般我们只考虑电阻的功率,对于普通工程师,只要能通过流过电阻的电流选择合适的功率,就可算做合格,如果能考虑到瞬时功率,就可以算做不错的工程师。但要能真正正确使用电阻,只有做到这两点还不够,看了下面的文字您就会明白,原来用电阻还有这么多讲究
tiankai001 模拟电子
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved