请选择 进入手机版 | 继续访问电脑版

通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 591|回复: 1

串口延长线引起的接收溢出中断

[复制链接]
发表于 2016-11-23 16:37:56 | 显示全部楼层 |阅读模式
本帖最后由 fangbo 于 2016-11-23 16:37 编辑

问题:
        1、串口接上延长线且延长线另一端悬空,上电后,未能正常运行。
        2、拔掉延长线,或者延长线另一端连上USB-RS232转接线,上电后正常运行。
推测:
        1、可能影响到ISP引脚电压,进入ISP模式。
验证:
        步骤一、接上延长线并悬空,上电后未能正常运行,此时测量ARM-BOOT0引脚电压为0,
                                       
         步骤二、在函数SystemInit(void)中添加以下代码,点亮GPIOF的所有led灯
  1.   RCC->AHB1ENR   |= 0x0000007F;

  2.   /* Configure PGx pins in Alternate function mode */  
  3.   GPIOF->MODER   = 0x00154000;
  4.   /* Configure PGx pins speed to 100 MHz */  
  5.   GPIOF->OSPEEDR = 0x002A8000;
复制代码
         步骤三、重复步骤一,所有led会闪烁以下再灭,且未能正常运行。经过在以上代码下断点发现,会执行该端代码。
          结论:程序已运行,说明没有进入ISP模式,程序运行异常。
追踪:
          1、仿真并维持其它异常运行条件,发现程序一直停留在函数$Sub$$USART1_IRQHandler(void)
          2、设断点,查看USART1的DR寄存器,发现上电后会出现一次上溢错误,生成中断且没有清除,如下图:
                                
          3、在中断处理函数$Sub$$USART1_IRQHandler(void)中添加以下代码,即可清除上溢错误标志位

  1. if(USART_GetITStatus(USART1, USART_IT_ORE_RX) != RESET)
  2.     {
  3.                 uint16_t sr = USART1->SR;
  4.         USART_ReceiveData(USART1);
  5.     }
复制代码
        4、重新操作,没有出现该问题



回复

使用道具 举报

发表于 2016-11-23 17:19:39 | 显示全部楼层
nice
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|TongYe R&D Inc. ( 粤ICP备17061194号-1 )

GMT+8, 2021-1-28 23:37 , Processed in 0.137008 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表