<stm32>用systick计数器做delay函数易出现的错误一则

在STM32程序调试中,发现基于Systick计数器的delay函数延迟时间不准确。问题在于,当主函数和中断服务函数同时调用delay函数时,由于Systick计数器的全局性质,会导致计数重置,进而影响延迟时间,造成错误。解决方案需避免在中断中使用可能导致计数器重置的delay函数。
摘要由CSDN通过智能技术生成

用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  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值