OpenEdv-开源电子网

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

定时器问题

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
发表于 2016-8-4 10:40:50 | 显示全部楼层 |阅读模式
1金钱

定时器初始化是原子哥例子的代码,没有改动。
中断函数是

void TIM3_IRQHandler(void)   //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
  TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
  LED1=!LED1;  
}
}

int main(void)
{
LED_Init();       //初始化与LED连接的硬件接口
  
TIM3_Int_Init(4999,7199); //10Khz 的计数频率,计数到 5000 为 500ms
}

主函数改成这样后 LED灯一直长亮。

如果把主函数改成如下,LED灯才会闪烁。
int main(void)
{
LED_Init();       //初始化与LED连接的硬件接口
  
TIM3_Int_Init(4999,7199); //10Khz 的计数频率,计数到 5000 为 500ms
  
while(1)
  {
  }

}
疑问:我觉得不加while死循环,LED灯也应该闪烁。



最佳答案

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

因为主函数执行结束后,会触发单片机复位,从头再来,不加死循环当然不会闪
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

67

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
212
金钱
212
注册时间
2015-8-5
在线时间
49 小时
发表于 2016-8-4 10:40:51 | 显示全部楼层
因为主函数执行结束后,会触发单片机复位,从头再来,不加死循环当然不会闪
开源QQ群:431600056
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-4 11:24:49 | 显示全部楼层
你决定这样就试一试呗。虽然应该是可以的
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-4 11:32:21 | 显示全部楼层
yklstudent 发表于 2016-8-4 11:26
不加可以个毛,定时器不停的初始化设置,能正常干活才怪

不是跑完就停那了么
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-4 11:35:46 | 显示全部楼层
楼主,你试过可以么
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
 楼主| 发表于 2016-8-4 13:48:37 | 显示全部楼层
感谢大家回复。上面我都是测试过的。估计是我还不懂是定时器原理。
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
 楼主| 发表于 2016-8-4 13:58:48 | 显示全部楼层
yklstudent 发表于 2016-8-4 11:26
不加可以个毛,定时器不停的初始化设置,能正常干活才怪

@yklstudent  定时器怎么会不停的初始化?能讲一下原理吗?
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-8-4 14:16:07 | 显示全部楼层
风之子 发表于 2016-8-4 13:58
@yklstudent  定时器怎么会不停的初始化?能讲一下原理吗?

是不是不加死循环,会出问题,会不断初始化?
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
 楼主| 发表于 2016-8-4 14:25:59 | 显示全部楼层
憨厚诚实大叔 发表于 2016-8-4 14:16
是不是不加死循环,会出问题,会不断初始化?

yklstudent 估计是这个意思。
回复

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-3-19
在线时间
16 小时
发表于 2016-8-4 14:30:31 | 显示全部楼层
风之子 发表于 2016-8-4 14:25
yklstudent 估计是这个意思。

程序跑到终点了,是不是会重头再来?
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
 楼主| 发表于 2016-8-4 15:52:10 | 显示全部楼层
八五三六 发表于 2016-8-4 14:30
程序跑到终点了,是不是会重头再来?

明白了你的意思了。
新问题:如果在while死循环后面 还有代码要执行 是不是要把定时器在线程里面初始化?如果不开线程,一直阻塞着while后面的程序一直执行不了。不知道理解的对不对
回复

使用道具 举报

55

主题

159

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2016-7-16
在线时间
64 小时
发表于 2016-8-4 16:15:32 | 显示全部楼层
有时间的话,在汇编模式下看看代码是如何执行的,你就明白一切的道理。
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2015-12-8
在线时间
12 小时
 楼主| 发表于 2016-8-4 16:47:15 | 显示全部楼层
清秋枫叶 发表于 2016-8-4 16:15
有时间的话,在汇编模式下看看代码是如何执行的,你就明白一切的道理。

好的。谢谢
回复

使用道具 举报

7

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
299
金钱
299
注册时间
2016-4-10
在线时间
48 小时
发表于 2016-8-4 22:47:36 | 显示全部楼层
函数的执行是从主函数第一个语句开始执行的,一直往下执行 大循环以外的只执行一次    怎么可能不放在打循环里能够实现LED闪烁
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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