初级会员 
  
	- 积分
 - 142
 
        - 金钱
 - 142 
 
       - 注册时间
 - 2016-8-12
 
      - 在线时间
 - 50 小时
 
 
 
 | 
 
10金钱 
今天上午跟着例程把输入捕获实验自己写了一遍,可是按键按下去没反应,各位可以帮我看看是什么原因吗?程序代码如下: 
c文件 
[mw_shl_code=c,true]#include "sys.h" 
#include "icap.h" 
void icapinit(u16 arr,u16 psc) 
{ 
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure; 
        NVIC_InitTypeDef NVIC_Initstructure; 
        TIM_ICInitTypeDef TIM_ICInitstructure; 
        GPIO_InitTypeDef GPIO_InitStructure; 
         
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 
         
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  
  GPIO_Init(GPIOA,&GPIO_InitStructure);  
  GPIO_ResetBits(GPIOA,GPIO_Pin_0); 
         
        TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1; 
        TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up; 
        TIM_TimeBaseInitstructure.TIM_Period=arr; 
        TIM_TimeBaseInitstructure.TIM_Prescaler=psc; 
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitstructure); 
         
        TIM_ICInitstructure.TIM_Channel=TIM_Channel_1; 
        TIM_ICInitstructure.TIM_ICFilter=0000; 
        TIM_ICInitstructure.TIM_ICPolarity=TIM_ICPolarity_Rising; 
        TIM_ICInitstructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; 
        TIM_ICInitstructure.TIM_ICSelection=TIM_ICSelection_DirectTI; 
        TIM_ICInit(TIM5,&TIM_ICInitstructure); 
         
        NVIC_Initstructure.NVIC_IRQChannel =TIM5_IRQn;  
  NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority=0x02;  
  NVIC_Initstructure.NVIC_IRQChannelSubPriority=0;  
  NVIC_Initstructure.NVIC_IRQChannelCmd=ENABLE; 
        NVIC_Init(&NVIC_Initstructure); 
         
        TIM_ITConfig(TIM5,TIM_IT_CC1,ENABLE); 
        TIM_Cmd(TIM5,ENABLE); 
} 
 
u8 sta=0; 
u16 val; 
void TIM5_IRQHandler(void) 
{ 
  if ((sta&0x80)==0) 
        { 
          if (TIM_GetITStatus(TIM5, TIM_IT_Update)!=RESET) 
                { 
                  if (sta&0x40) 
                        { 
                          if ((val&0x3f)==0x3f) 
                                { 
                                  sta|=0x80; 
                                        val=0; 
                                } 
                                else sta++; 
                        } 
                } 
         if (TIM_GetITStatus(TIM5, TIM_IT_CC1)!=RESET) 
         { 
           if (sta&0x40) 
                 { 
                   sta|=0x80; 
                         val=TIM_GetCapture1(TIM5); 
                         TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);  
                 } 
                 else  
      { 
        sta=0;  
        val=0; 
        TIM_SetCounter(TIM5,0);  
        sta|=0X40;   
        TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);  
      } 
         } 
        } 
        TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update); 
} 
 
[/mw_shl_code] 
 
主函数 
[mw_shl_code=c,true]#include "sys.h" 
#include "key.h" 
#include "delay.h" 
#include "led.h" 
#include "beep.h" 
#include "exti.h" 
#include "wdg.h" 
#include "usart.h" 
#include "timer.h" 
#include "pwm.h" 
#include "icap.h" 
extern u8 sta; 
extern u16 val; 
int main() 
{ 
        u32 tem; 
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
  uart_init(115200); 
  ledinit(); 
        keyinit(); 
        delay_init(); 
        beepinit(); 
        extiinit(); 
        icapinit(0XFFFF,72-1); 
        pwminit(899,0); 
//        timerinit(4999,7199); 
//  iwdginit(4,625); 
//        wwdginit(0X5F,WWDG_Prescaler_8,0x7F); 
  while(1) 
        { 
                if (sta&0x80) 
                { 
                  tem=sta&0x3f; 
                        tem*=65536; 
                        tem+=val; 
                        printf("°′¼ü°′ÏÂê±¼äÎa%d",tem); 
                        printf("HIGH:%d us\r\n",tem);  
                        sta=0; 
                } 
        } 
} 
[/mw_shl_code] 
 |   
 
 
 
 
 
 |