求问怎么用定时器延时36s?

2019-10-15 04:37发布

功能大致是给个值a自减到0,然后等待36s,给接了继电器的一个GPIO引脚一个高低电平来控制继电器的开闭。
但是不会用定时器延时这么长时间……
用的是STM32F1。
谢谢。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
xdzhang
1楼-- · 2019-10-17 00:58
 精彩回答 2  元偷偷看……
wangzx
2楼-- · 2019-10-17 03:37
我这是毫秒和微秒级的延时都行  但是合并在一起就不行
void delay_us(u32 nus)
{               

//        TIM3->CNT = 0;
        TIM3->ARR = nus-1;
        TIM3->PSC = 71;
//        TIM3->EGR = TIM_PSCReloadMode_Immediate;
        TIM_Cmd(TIM3,ENABLE);
        while(TIM3_Flag==RESET)//μè′yê±¼äμ½′ï
        {         
                ;
        }
        TIM_Cmd(TIM3,DISABLE);
        TIM3_Flag = 0;                       
}
//Ñóê±nms
//×¢òanmsμÄ·¶Î§
//SysTick->LOADÎa24λ¼Ä′æÆ÷,ËùòÔ,×î′óÑóê±Îa:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLKμ¥&#206;&#187;&#206;aHz,nmsμ¥&#206;&#187;&#206;ams
//&#182;&#212;72Mì&#245;&#188;t&#207;&#194;,nms<=1864
void delay_ms(u16 nms)
{


                TIM3->CNT = 0;       
          TIM3->ARR = nms*10-1 ;
                TIM3->PSC = 7199;
//        TIM3->EGR = TIM_PSCReloadMode_Immediate;
        TIM_Cmd(TIM3,ENABLE);
        while(TIM3_Flag==RESET)//μè′yê±&#188;&#228;μ&#189;′&#239;
        {         
                ;
        }
        TIM_Cmd(TIM3,DISABLE);
        TIM3_Flag=0;               
}
xdzhang
3楼-- · 2019-10-17 04:30
直接用原子哥的就行。
老男孩
4楼-- · 2019-10-17 07:08
本帖最后由 老男孩 于 2017-2-6 12:49 编辑

你可以用所以systick定时器写一个1ms的中断
然后设置一个全局变量:
int i=0;
void SysTick_Handler()
{
      if(i!=0)
     {
        i--;
     }
}
然后写一个延时函数
void delay_ms(int x)
{
  i=x;
  while(i);
}
这样在程序中调用delay_ms()这个函数就好了把形参赋值为3600
但是这样cpu空等时间比较多,如果要求实时性比较强的话可以用操作系统
超级歪
5楼-- · 2019-10-17 08:55
本帖最后由 超级歪 于 2017-2-6 12:59 编辑

static int timerflag=0;

void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
        {
                  LED1=!LED1;
                 timerflag++;
                  if(timerflag==320)
                      timerflag=0;
        }
               
        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
}

中断就设置为100ms计数器

woddeg2
6楼-- · 2019-10-17 09:28
 精彩回答 2  元偷偷看……

一周热门 更多>