初级会员

- 积分
- 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]
|
|