你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

外部中断进一次自动执行两次

[复制链接]
a376262974 提问时间:2015-12-17 11:15 /
最近在做一个IO模拟串口的。
外部中断进一次自动执行两次,而且实验发现,第一次进中断有问题,串口显示的内容不符合,第二次开始就正常了。
Main里面的主要函数

disableInterrupts();
TIM4_Config();
uart();
GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_IT);//输入
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOD,  EXTI_SENSITIVITY_FALL_ONLY);
enableInterrupts();

中断
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
unsigned int recuart=0;
  char num=8;
  //低位先出
  Delay(1);//start
  while(num--)
   {
     recuart>>=1;
     if(GPIO_ReadInputPin(GPIOD, GPIO_PIN_3)!=RESET)
     recuart|=0x80;
     Delay(1);
  }
  UART1_SendData8(recuart);
}

收藏 评论3 发布时间:2015-12-17 11:15

举报

3个回答
追寻V 回答时间:2015-12-17 13:01:27

     if(GPIO_ReadInputPin(GPIOD, GPIO_PIN_3)!=RESET)
     recuart|=0x80;
     Delay(1);
recuart>>=1;


你改成这样试试,
a376262974 回答时间:2015-12-19 10:29:54
本帖最后由 a376262974 于 2015-12-19 10:31 编辑

算是勉强解决了,前面加个判断语句。。。

INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
  if(GPIO_ReadInputPin(GPIOD, GPIO_PIN_3) == RESET)
  {
  unsigned int recuart=0;
  char num=8;
  //低位先出
  Delay(1);//start
  while(num--)
   {
     
    recuart>>=1;
     if(GPIO_ReadInputPin(GPIOD, GPIO_PIN_3)!=RESET)
     recuart|=0x80;
     Delay(1);     
  }
  
  UART1_SendData8(recuart);
  }
}
a376262974 回答时间:2015-12-19 10:32:02
还有个问题,为什么第一次进入中断,感觉时序跟不上,输出的值是错的
输入AA 输出是54 然后后面都正常了

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版