STM32串口接收中断溢出问题解决

您所在的位置:网站首页 串口通信错误如何解决方法 STM32串口接收中断溢出问题解决

STM32串口接收中断溢出问题解决

2024-07-17 13:13| 来源: 网络整理| 查看: 265

串口在接收数据过多时,会出现串口溢出错误,并进入溢出中断(ORE中断)

 

 

 

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

 

 

 

 

清除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); 读取串口数据}

 

 

ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)

USART_GetITStatus(USART1,USART_IT_ORE)这个函数在USART_IT_ERR未使能时并不能正确读取ORE的状态!

可以使用USART_GetFlagStatus(USART1,USART_FLAG_ORE)读取,或者初始化时使能USART_IT_ERR。

 

 

补充一下这俩函数的区别(看库函数更直接):

 

IT主要就是与中断相关的,检查USART中断产生与否,当USART发送完成后会有USART_IT_TC中断,因此可以用来判断,而USART_GetFlagStatus是USART标志位设置与否,其中就有发送完成标志位USART_Flag_TC所以也可用来判断。而最终都是操作ISR寄存器

 

 

 

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了接收中断,那么ORE中断也同时被开启了。 ORE中断只能使用USART_GetFlagStatus(USART1, USART_FLAG_ORE) 读到(没有使能USART_IT_ERR中断时)

解决办法:

       1.  初始化时,开启中断

USART_ITConfig(USART1, USART_IT_PE, ENABLE);    //开启PE错误接收中断Bit 8PEIE: PE interrupt enable  //CR2 开启ERR中断  USART_ITConfig(USART1, USART_IT_ERR, ENABLE);

       2. 在STM32中断函数增加USART_IT_ORE等异常中断的处理!

 



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3