OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2450|回复: 8

想做一个5分钟的定时器实现相应功能

[复制链接]

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
发表于 2019-5-20 18:42:00 | 显示全部楼层 |阅读模式
1金钱
想做一个定时器程序实现数据的反转,但是计算了一下最多能计数为58S左右,怎么改成5分钟后才启动定时器3的中断,请各位大神指点一下 多谢 多谢
void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update );  
                s=!s;
                //TIM_Cmd(TIM3,ENABLE);
                }
               
}

最佳答案

查看完整内容[请看2#楼]

真的是活人能被尿憋死啊, 你不会再设一个变量吗? 定时器设计成1秒中断一次就行了。 void TIM3_IRQHandler(void) //TIM3中断 { static u32 My_Delays=300; //5分钟才300秒而已,这个变量延时几年都行 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); if(My_Delays)My_Delays--; else { ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1954

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4503
金钱
4503
注册时间
2018-5-11
在线时间
943 小时
发表于 2019-5-20 18:42:01 | 显示全部楼层
本帖最后由 warship 于 2019-5-20 19:20 编辑

真的是活人能被尿憋死啊,
你不会再设一个变量吗?
定时器设计成1秒中断一次就行了。
void TIM3_IRQHandler(void)   //TIM3中断
{
  static u32 My_Delays=300;  //5分钟才300秒而已,这个变量延时几年都行
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
         {                TIM_ClearITPendingBit(TIM3, TIM_IT_Update );  
                if(My_Delays)My_Delays--;
                else {

                My_Delays=300;
                s=!s;
                //TIM_Cmd(TIM3,ENABLE);
               }
         }
               
}

我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2019-5-20 19:08:07 | 显示全部楼层
10*30=5分钟,10s一个中断,再高一个变量计数30次就是你要的5分钟
一分耕耘一分收获。
回复

使用道具 举报

0

主题

79

帖子

0

精华

高级会员

Rank: 4

积分
727
金钱
727
注册时间
2016-5-27
在线时间
91 小时
发表于 2019-5-20 19:33:10 | 显示全部楼层
给你一个我的程序参考
中断函数 (T3可定为1ms 或 10ms)
#define T3MAXTIME   0xfffe
u16 t3TimerCount;
void TIM3_IRQHandler(void)
{
  if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM3,TIM_FLAG_Update);
    if(t3TimerCount++>=T3MAXTIME) t3TimerCount=0;
  }
}

再做个判断延时的函数
u8 Delay_Short (u16 *pClock,u16 bTimeNum)
{
   u16 bTemp=0;
   if(*pClock != 0)
        {
      if(*pClock != t3TimerCount)  
               {
          if(t3TimerCount>*pClock)   bTemp = t3TimerCount-*pClock;
                  else                       bTemp = t3TimerCount+(T3MAXTIME-*pClock);
                  if(bTemp >= bTimeNum)
                  {
                    *pClock = 0;
                        return 1;
                  }
                }
         }
    else *pClock = t3TimerCount;
        return 0;
}

然后在main中

void main()
{
   u16 Clock=0;
   ......
   while(1)
   {
      if(Delay_Short(&iClock,60000))  //T3定的1ms中断 60000=1分钟,把T3定为10ms,5000就是5分钟
       {
           // 这里写你要干的事
       }
   }
}

另外还可以把Clock定义为u32,那么可以想要多长就可以多长。
回复

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
发表于 2019-5-20 21:03:40 | 显示全部楼层
问这个问题的人,绝笔是个人才
青涩不及当初,聚散不由你我!
回复

使用道具 举报

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
 楼主| 发表于 2019-5-21 10:55:46 | 显示全部楼层
warship 发表于 2019-5-20 18:42
真的是活人能被尿憋死啊,
你不会再设一个变量吗?
定时器设计成1秒中断一次就行了。

多谢您的指点
回复

使用道具 举报

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
 楼主| 发表于 2019-5-21 10:56:20 | 显示全部楼层
yklstudent 发表于 2019-5-20 19:08
10*30=5分钟,10s一个中断,再高一个变量计数30次就是你要的5分钟

问题已经解决了 谢谢您
回复

使用道具 举报

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
 楼主| 发表于 2019-5-21 10:57:12 | 显示全部楼层
www88988 发表于 2019-5-20 19:33
给你一个我的程序参考
中断函数 (T3可定为1ms 或 10ms)
#define T3MAXTIME   0xfffe

我用的一楼的方法已经解决了 谢谢您
回复

使用道具 举报

14

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2019-4-10
在线时间
30 小时
 楼主| 发表于 2019-5-21 10:58:09 | 显示全部楼层
风清扬丶 发表于 2019-5-20 21:03
问这个问题的人,绝笔是个人才

差的东西太多,思路太局限,以后有问题还请您赐教
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 12:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表