打印
[STM32F1]

STM32红外通讯 为什么只能进一次外部中断呢?

[复制链接]
2220|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kevillu|  楼主 | 2015-3-18 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昨天开始调红外通讯,我是通过外部中断的下降沿触发,进入中断函数后,当检测到高电平出现时就开始计时高电平保持的时长, 但是现在的问题是 这个外部中断函数每次都只能在按下的时候,能够检测到同步码4.5ms的高电平,后面的数据传输都不能进入外部中断,求解?下面的相关代码
void EXIT_Configuration(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource8);        //配置PC8为外部中断

  EXTI_ClearITPendingBit(EXTI_Line8);

  EXTI_InitStructure.EXTI_Line = EXTI_Line8;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                //设置触发方式为下降沿触发
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
}

void EXTI9_5_IRQHandler(void)
{

        u8 StartFlag=0;
        u8 RxBit=0;
        while(1)
        {
                if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8))
                {
                        PulseWidth=Pulse_Width_Check();                                           //获取高电平保持时间
                        if(PulseWidth>=120)        break;                                                   //超过4.5ms垃圾数据直接跳出
                        if(80<=PulseWidth<120) StartFlag=1;                                   //收到同步数据
                        else if(36<=PulseWidth<80)                                                   //1800us-4000us 区间默认为2250us   表示连续按键,按键值加1
                        {
                                SameDataFlag=1;
                                DataCount++;
                                break;       
                        }
                        else if(20<=PulseWidth<36)        RxBit=1;                           //1000us-1800us 区间默认为1680us  接收数据为1
                        else if(4<=PulseWidth<20)        RxBit=0;                           //200us-1000us 区间默认为560us    接收数据为0
                        if(StartFlag)
                        {
                                ReceiveData<<=1;
                                ReceiveData+=RxBit;
                                DataCount=0;
                        }
                }               
        }
        //        EXTI_ClearITPendingBit(EXTI_Line8);
                EXTI_ClearFlag(EXTI_Line8);       
}
沙发
liunanmi| | 2015-3-18 14:00 | 只看该作者
"20<=PulseWidth<36" 这种前后比较的,写的好像都不规范吧!最好分开写!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

33

帖子

1

粉丝