注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

北北的个人空间 http://home.eeworld.com.cn/space-uid-348360.html [收藏] [复制] [分享] [RSS]

日志

关于STM8S003和S103,可能会出现的一直进入串口接收中断子程序问题的处理。

热度 1已有 3311 次阅读2016-7-20 10:28 |个人分类:STM8S


/*-------------------------------------- (C) COPYRIGHT  北 ----------------------------------------------
  * @文件性质:  应用总结。   
  * @笔记主题:  关于STM8S003和S103,可能会出现的一直进入串口接收中断子程序问题的处理。
  * @文件功能:  
  * @作者    :  bei
  * @创建日期:  20160720
 * @修改日期:  
 * @修改记录:      
-----------------------------------------------------------------------------------------------------------*/

对STM8S003F3或103系列等单片机,由于与其他单片机不一样,串口接收中断中有OR标志位(UART_SR寄存器中的OR位),即过载错误标志位。
若处理不当,将会导致反复进入串口接收中断。

一般,我们的串口接收中断子程序如下:
 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
 {
u8 Res;
//读取接收到的数据,当读完数据后自动取消RXNE的中断标志位
Res = UART1_ReceiveData8();
        //数据接收过程处理。。。
 //清中断。
 UART1_ClearITPendingBit(UART1_IT_RXNE);
 }

但是对于STM8S003和STM8S103系列,若接收的数据被下个接收到的数据覆盖,会导致过载错误,UART_SR中的OR置位,引起串口中断从而进入中断程序。
所以必须正确地处理该位,否则会出现一直进入中断的问题。如下:

 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
 {
u8 Res;
//读取接收到的数据,当读完数据后自动取消RXNE的中断标志位
Res = UART1_ReceiveData8();
    //数据接收过程处理。。。
 //清中断。
 UART1_ClearITPendingBit(UART1_IT_RXNE);
  
 //如果发生了过载错误,则清除该中断标志。
 if(UART1->SR & UART1_SR_OR)
 {
UART1_ClearITPendingBit(UART1_IT_OR);
  }  
//注意,直接写成 UART1_ClearITPendingBit(UART1_IT_OR); 依然会出现一直进中断的问题。
//我认为是需要先读下UART_SR这个寄存器,然后再清除,这样才能使程序正常。
 }

完结。

发表评论 评论 (2 个评论)

回复 JK-Wang 2018-4-12 10:59
//我认为是需要先读下UART_SR这个寄存器,然后再清除,这样才能使程序正常。
这是因为官方库 UART1_ClearITPendingBit这个函数里没有对UART1_IT_OR的处理语句
void UART1_ClearITPendingBit(UART1_IT_TypeDef UART1_IT)
{
  assert_param(IS_UART1_CLEAR_IT_OK(UART1_IT));
  
  /* Clear the Receive Register Not Empty pending bit */
  if (UART1_IT == UART1_IT_RXNE)
  {
    UART1->SR = (uint8_t)~(UART1_SR_RXNE);
  }
  /* Clear the LIN Break Detection pending bit */
  else
  {
    UART1->CR4 &= (uint8_t)~(UART1_CR4_LBDF);
  }
}
回复 JK-Wang 2018-4-12 11:16
我也碰到这个问题了,调试的时候不停的在UART1的接收中断里打转
看来你的贴子才注意到有OR这个坑,我在读DR寄存器之前先读SR来解决这个问题,手册上写的。我尝试了你的操作也可以成功地解决,看来手册写的时序也不是唯一的解决办法。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-4-26 07:41 , Processed in 0.019335 second(s), 12 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部