|
发表于 2019-6-18 18:42:49
|
显示全部楼层
按照楼主的做法,
void EXTI_Config(void)
{
GPIO_DeInit(GPIOA);
GPIO_Init(GPIOA,GPIO_Pin_2,GPIO_Mode_In_PU_IT);
EXTI_DeInit();
TIM2_Config(); ----------------------------------------------这个定时器在这里初始化对吗?
EXTI_SetPinSensitivity(EXTI_Pin_2,EXTI_Trigger_Rising_Falling);
}
void TIM2_Config()
{
CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);
TIM2_DeInit();
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
TIM2_TimeBaseInit(TIM2_Prescaler_64, TIM2_CounterMode_Up, 255);//定时单位4us
TIM2_ARRPreloadConfig(ENABLE);
TIM2_Cmd(ENABLE);
}
当触发了上升沿或者下降沿的时候就会进入到外部中断服务函数中,
INTERRUPT_HANDLER(EXTI2_IRQHandler, 10)
{
unsigned short time;
time= TIM2_GetCounter();
unsigned char ucTemp;
TIM2_SetCounter(0); ------------------------------------------------------------此时清0 了之后 计数器会不断的加 然后第二次进入中断的时候读取的值不就 不是电平的值了
}
这应该就是触发上升沿或者下降沿中断了,就会进入中断服务函数中,直接读取定时器的值,此时定时器的值应该是 128 或者64 左右的范围内,我通过串口打印定时器的计数值,只有一个符合,按理说此时的计数器值应该为一个周期或者半个周期时间。
|
|