STM32串口ORE中断学习笔记

摘要:

在STM32串口应用过程中,面对串口高速频繁收发和Flash操作同步进行时,出现串口不响应的情况,但显示和按键正常,查阅相关资料后定位到串口ORE溢出中断,以此记录。

一、ORE中断定义及产生原因

        通过查阅《STM32F系列ARM内核32位高性能微控制器参考手册V10_1.pdf》以及学习CSDN博客了解到以下内容:

        1、ORE溢出中断与串口接收中断使用的是同一个使能位,使能串口接收中断的同时就使能了ORE溢出中断。

USART中断使能

        2、如果RXNE接收标志还没有被复位,又接收到一个字符,此时就会产生ORE溢出错误;溢出错误产生后,串口随后接收到的数据都将丢失,我认为这一点就是导致串口无响应的根本原因。

ORE溢出错误产生原因及后果

 二、Flash读写与串口收发的冲突

        通过学习CSDN博客了解到,Flash写入过程中,无法访问Flash中的代码和数据,从而是无法执行中断服务函数代码的;可以理解为Flash操作是一个优先级更高的任务,在进行Flash操作时,串口接收中断被搁置了,又因为Flash擦除时间较长,串口接收中断RXNE标志一直没有被清除,导致串口产生了溢出中断。STM32F10x单片机Flash写操作导致中断不响应问题_rtos在烧写flash时停止其他活动_哐哐哐 Quan的博客-CSDN博客

三、解决措施

        通过参考手册和CSDN博客了解到,清除ORE溢出错误的方法为顺序执行对USART_SR和USART_DR寄存器的读操作,参考http://t.csdn.cn/xUByU在串口中断函数入口处增加以下代码就解决了ORE溢出错误导致串口无响应的问题。

	if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
	{
		
		USART_ClearFlag(USART2,USART_FLAG_ORE);//清除ORE标志位
		USART_ReceiveData(USART2);
		
	}

        但是还需要提出来的是,这样虽然避免了串口无响应的问题,但是因为Flash操作时间长,会概率性出现丢失报文的现象,针对这一点可以参考http://t.csdn.cn/IQTp6进行修改,该篇博客讲述了如何将中断函数放到RAM中和修改中断向量表地址的方法,以此来避免Flash操作和中断冲突,限于个人水平,该博客的方法我还未进行实践。


参考资料:

http://t.csdn.cn/W05K5

http://t.csdn.cn/kpN9p

参考的博客较多,如有遗漏还请见谅!


本文用以记录学习,文中内容如有错误或遗漏,欢迎各位指正交流,谢谢!

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值