用systick计数器做delay函数易出现的错误一则
今天在调试程序过程中,发现以前用的好好的delay函数突然不准了,一开始怎么也没有怀疑到delay函数的问题,先贴代码:
//主函数里用到了delay函数
void main()
{
if(flag==1)
{
Delay_Ms(1000);
flag=0;
}
}
中断里也用到了delay函数
void EXTI9_5_IRQHandler(void)
{
Delay_Ms(1);
if((EXTI_GetITStatus(EXTI_Line8)==1)&&(flag==0))
{
GPIO_ResetBits(GPIOC, GPIO_Pin_11);
GPIO_SetBits(GPIOC, GPIO_Pin_9);
Delay_Us(100);//脉冲持续时间
flag=1;
TIM5CH1_CAPTURE_STA=0; //清空
TIM5CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM5,0);
//ms_delay(20000);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
Delay_Us(3);//延时接受
GPIO_SetBits(GPIOC, GPIO_Pin_11);
}
EXTI_ClearITPendingBit(EXTI_Line8); // LINE8