STM32
直播中

黄明谊

7年用户 135经验值
私信 关注
[问答]

请问EXTI5是否能CHECK到有DATA1有多少下PULSE呢?

以下PROG是修改自REMOTE的EXti5是否能CHECK到有DATA1有多少下PULSE呢?
用示波器測出  PC5  本來有13下
但PROG只CHECK出5-7下,求幫幫忙,非常感謝
#include "cardread.h"
u32 t1, T;
u32 Remote_Odr;
void Remote_Init(void)
{        
RCC->APB2ENR|=1<<4;
GPIOC->CRL&=0XFFF0FFFF;
GPIOC->CRL|=0X00080000;
GPIOC->ODR|=1<<4;     
Ex_NVIC_Config(GPIO_C,4,FTIR);
MY_NVIC_Init(0,0,EXTI4_IRQChannel,0);
RCC->APB2ENR|=1<<5;      
GPIOC->CRL&=0XFF0FFFFF;
GPIOC->CRL|=0X00800000;
GPIOC->ODR|=1<<5;
Ex_NVIC_Config(GPIO_C,5,FTIR);
MY_NVIC_Init(0,0,EXTI9_5_IRQChannel,0);
}   
void EXTI4_IRQHandler(void)
{
    u32 Break_out = 0,T = 0;
    u8 RODATA;
Remote_Odr = 0;
    EXTI->IMR&=~(1<<5);
T++;   t1=1;
RODATA=0;
Remote_Odr+=RODATA;
Remote_Odr<<=1;
   while(1)
     {  
       Break_out++;
         if(Break_out == 1000000 || T == 26)
         break;
           if(DATA0 && DATA1)
       {
       t1++;
     if(!DATA0)
   {
   T++;
   RODATA=0;
   Remote_Odr+=RODATA;
   Remote_Odr<<=1;
   }
     if(!DATA1)
   {
   T++;
   RODATA=1;
   Remote_Odr+=RODATA;
   Remote_Odr<<=1;
   }
    }
  }
     EXTI->R=1<<4;
     EXTI->IMR|=1<<5;
}
void EXTI9_5_IRQHandler(void)
{
     u32 Break_out = 0;
     u8 RODATA;
     u32 T = 0;
     u32 Remote_Odr = 0;
     EXTI->IMR&=~(1<<4);
    T++; t1 = 1;
    RODATA=1;
    Remote_Odr+=RODATA;
    Remote_Odr<<=1;
    while(1)
     {  
           Break_out++;
          if(Break_out == 1000000 || T == 26)
          break;
         if(DATA1)
         {
            t1++;
            if(!DATA1)
              {
               T++;
               RODATA=1;
               Remote_Odr+=RODATA;
               Remote_Odr<<=1;
              }
           }
     }
    EXTI->R=1<<5;   
    EXTI->IMR|=1<<4;
}

回帖(8)

王荣

2019-7-5 09:01:17
如果仅仅是测量脉冲,则不需要做其他判断了.
void EXTI9_5_IRQHandler(void)

 T++;
    EXTI->R|=1<<5;   
}
最后统计T的次数即可.
举报

易里更

2019-7-5 09:15:00
 如要用exti5,exti4要關中斷
是否這
void EXTI9_5_IRQHandler(void)

 T++;
   EXTI->IMR&=~(1<<4);
           if(DATA1)         //  如須要     
              {
               T++;
               RODATA=1;
               Remote_Odr+=RODATA;
               Remote_Odr<<=1;
              }
   EXTI->R|=1<<5;  
   EXTI->IMR|=1<<4;
}
举报

刘超

2019-7-5 09:23:54
只要你没开启EXIT4就不用管它的.
还有最好在这种函数里面判断一下是否是EXIT5所产生的中断.
举报

王侃

2019-7-5 09:36:06
要同時用exti4,& exti5,如何在
函数里面判断一下是否是EXIT5所产生的中断呢?
關timer3,是怎樣的code?
thank you
举报

更多回帖

发帖
×
20
完善资料,
赚取积分