OpenEdv-开源电子网

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

STM32F103用定时器如何实现亮灯时间逐次增加

[复制链接]

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-27
在线时间
12 小时
发表于 2018-5-30 15:32:28 | 显示全部楼层 |阅读模式
      如题,楼主已经利用定时器和中断实现了1s让LED亮灭,现在希望用定时器让亮灯时间逐次增加。但是运行中发现了一些问题:1.中断里能不能加延迟函数?比如我在LED取反后加延迟,好像没什么区别,然而把带参数的延迟函数放到前面就干脆不亮灯了。
2.有什么办法能让它用定时器的方式实现?我也还想过初始化定时器函数的值。
1.PNG 2.PNG 3.PNG
以下是改了中断服务函数: 4.PNG 这样好像导致时间乱了 也没达到预期效果

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
345
金钱
345
注册时间
2017-10-23
在线时间
72 小时
发表于 2018-5-30 16:46:04 | 显示全部楼层
本帖最后由 史文库 于 2018-5-30 17:12 编辑

设一个标志位bzw=0, 计数t=0;
k=10;//1秒  0.1秒增加
TIM3_Int_Init(999,7199);//0.1秒
void TIM3_IRQHandler(void)   //
{   if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //
   {
      TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //
        if(bzw==0)       
        {
          t++;
          if(t>10)//1秒
          {
            led=0;
            bzw=1;
            t=0;
          }
        }
        if(bzw==1)       
        {
          t++;
          if(t>k)//1秒
          {
            k++;//增加0.1秒
            led=1;
            bzw=0;
            t=0;
          }
        }
   }
}

回复 支持 1 反对 0

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-5-30 16:40:19 | 显示全部楼层
中断里不要加延时,中断里不要加延时,中断里不要加延时,重要的事情说三遍。一定要养成这个习惯,中断要快进快出。
想要达到你说的效果,可以把定时器延时做短一些,比如1ms进中断,然后再单独做个全局变量计数,在中断里面判断计数值来进行灯操作即可。
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2018-5-30 16:59:27 | 显示全部楼层
假设定时器中断1ms
int period = 1;
int cnt = 0;
void TIM3_IRQHandler(void)   //
{
   cnt++;
   if(cnt % period == 0)
    {
         led != led;
        cnt = 0;
        period  += 1;
    }
}
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-27
在线时间
12 小时
 楼主| 发表于 2018-5-30 22:59:04 | 显示全部楼层
史文库 发表于 2018-5-30 16:46
设一个标志位bzw=0, 计数t=0;
k=10;//1秒  0.1秒增加
TIM3_Int_Init(999,7199);//0.1秒

程序可以实现,感谢
回复 支持 反对

使用道具 举报

5

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-5-27
在线时间
12 小时
 楼主| 发表于 2018-5-30 22:59:59 | 显示全部楼层
kvdong 发表于 2018-5-30 16:40
中断里不要加延时,中断里不要加延时,中断里不要加延时,重要的事情说三遍。一定要养成这个习惯,中断要快 ...

感谢提供了一个新思路,以前没试过。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 22:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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