历史上的今天
返回首页

历史上的今天

今天是:2025年06月08日(星期日)

正在发生

2018年06月08日 | STM32串口接收中断溢出问题解决

2018-06-08 来源:eefocus

在使用一个串口发数据的传感器过程中,发现程序第一次进入串口中断之后不再执行主函数的内容,中断中的内容也不执行。查询大量资料后发现:串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(ORE中断)。接下来是错误产生原因以及解决方法。 
(1)什么是ORE中断?为什么会产生? 
这里写图片描述

产生原因如上所述。

ORE标志位在USART_SR寄存器,但值得注意的是,当我们打开串口接收中断时,同时也就打开了ORE中断。

这里写图片描述

(2)如何解决? 
看了上面的资料之后,我知道程序是死在了串口溢出中断。处理中断时,我首先想到的是清除这个中断标志位,但是遇到了很多麻烦。

这里写图片描述

清除ORE位的方法:顺序执行对USART_SR和USART_DR寄存器的读操作。 
注意:在此使用USART_ClearITPendingBit(USART1, USART_IT_ORE);清除ORE位是没有任何作用的。 
还有ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时) 
这些都是在这个帖子里读到的http://blog.csdn.net/love_maomao/article/details/8234039帖子还指出了手册的翻译错误,哈哈,很厉害的博主(在此表白)。 
最后附上解决方案: 
中断服务函数: 
if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET) 

USART_ClearFlag(USART2, USART_FLAG_ORE); //清除溢出中断 
}

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 

USART_ClearITPendingBit(USART2, USART_IT_RXNE); 
//rebuf[num++] = USART_ReceiveData(USART2); 读取串口数据 
}


推荐阅读

史海拾趣

Densitron公司的发展小趣事

为了扩大市场份额,Densitron公司制定了一系列市场拓展策略。公司首先分析了市场需求和竞争态势,确定了目标市场。然后,通过加强品牌宣传、优化销售渠道、提高客户服务质量等手段,不断提升品牌知名度和客户满意度。此外,公司还积极开展国际合作,与全球知名电子企业建立了紧密的合作关系,共同开拓市场。这些策略的实施,使得Densitron公司的市场份额逐年上升,成为行业内的领军企业。

EPIC公司的发展小趣事

2006年,Epic Games公布了基于Xbox 360游戏平台的《战争机器》。这款游戏以其出色的画面效果、紧张刺激的战斗场景和深入人心的故事情节,迅速在市场上取得了成功。它的畅销不仅进一步巩固了Epic Games在游戏开发领域的地位,也证明了虚幻引擎在开发高质量游戏方面的强大能力。

富捷(FOJAN)公司的发展小趣事

富捷电子的发展离不开政府的大力支持和帮助。近年来,公司多次获得地方政府颁发的荣誉和奖励,如“制造业三年倍增先进集体”等。这些荣誉不仅是对公司过去成绩的肯定,更是对未来发展的期许和激励。在政府的政策扶持下,富捷电子将继续加大研发投入、优化产品结构、提升市场竞争力,为电子元器件行业的国产化替代和高质量发展作出更大贡献。

Fanstel公司的发展小趣事

Fanstel公司深知人才是企业发展的关键因素。因此,公司一直注重人才的培养和引进。公司建立了完善的人才培养机制,为员工提供各种培训和学习机会,帮助他们提升自身素质和能力。同时,Fanstel还积极引进高端人才,打造了一支具有丰富经验和专业技能的研发团队。这些人才的加入为公司的技术创新和产品研发提供了有力支持。

Datalogic公司的发展小趣事

随着电动汽车行业的兴起,汽车行业对零部件的标记和追踪要求也日益严格。Datalogic凭借其强大的技术实力,成功开发出3W固态激光打标机Vlase UV 3,该产品能够在橙色部件上实现高度可见、稳定和持久的对比度标记,解决了电动汽车生产中的一大难题。这一创新不仅展示了Datalogic的技术实力,也进一步巩固了其在电子行业中的领先地位。

General Electronic Devices公司的发展小趣事
负责产生控制信号,驱动开关元件按一定频率和占空比工作。

问答坊 | AI 解惑

产品介绍

这里面是无线龙通讯科技的一些产品资料,希望对大家有些帮助…

查看全部问答>

74LS47驱动数码管问题!!!

请问大家哈,我用74LS47驱动两个4位数码管,数码管亮度很微弱,我更改为双电源,单独给数码管提供5V电压,但是情况仍没有改变。我一时找不到原因!大家有什么看法没?感谢!!感谢!!感谢!!!…

查看全部问答>

开发PIC绝对不可缺少的仿真软件(转)

来源:http://pic16.com/bbs/dispbbs.asp?boardID=8&ID=41595&page=4 这里一分钟就让你学会使用PROTEUS(完整版) 近期流感爆发 由于小弟天天沉醉在电脑前忘乎所以 被染病多日随入院治疗 忽有客户来寻 手头一无开发工具 二无相关软件 只有笔记本 ...…

查看全部问答>

功放电路250种全集

功放电路250种全集 电路全部为图片格式,请大家视情况下载。…

查看全部问答>

wince5.0的死机问题

小弟用的wince5.0+2440,做了一些扳子后,发现有部分板子运行内存测试程序和串口通信时会死机,但是dnw上有没有任何错误提示信息,只是lcd屏上显示的内容停止了,程序感觉没有运行了,点触摸屏也没有任何反应。请问有没有大哥遇到同样的问题?原因 ...…

查看全部问答>

触摸屏的背光和触摸板驱动电路是分开的吗?为什么黑屏但触摸好用?

触摸屏的背光和触摸板驱动电路是分开的吗?为什么黑屏但触摸好用?…

查看全部问答>

关于单片机定时器溢出值的设定

本人最近在学习单片机,发现很多程序里面都有关于定时器溢出值的设定 例如,在DS18B20温度测量与控制实验中,有这样的程序 TR1=0; //STOP Timer1 TH1=(-SYSCLK/us)>>8; //set Timer1 to overflow in us TL1=-SYSCLK/us; TR1=1; //STAR Ti ...…

查看全部问答>

LM3S菜鸟成长日记-SD卡-文件写/读

replyreload += \',\' + 813951;实现功能:创建12-29.txt,写入EEWORD GOOD!,然后在读出来 主代码: int main(void){ //系统时钟 SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC| SYSCTL_OSC_MAIN |     &n ...…

查看全部问答>

全局时钟资源的使用方法

IBUFG + BUFG的使用方法:IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。 IBUFGDS + BUFG的使用方法:当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。 ...…

查看全部问答>

大家说说 ,自己都什么情况下把 DSP给烧了.

大家说说 ,自己都什么情况下把 DSP给烧了. 说说我的: AD 的过压.   另外模拟地没有处理好. 短路了.   有经历过更复杂的吗? …

查看全部问答>