OpenEdv-开源电子网

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

关于关闭定时器的,有没有人试过

[复制链接]

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
发表于 2014-3-3 17:05:18 | 显示全部楼层 |阅读模式
 












































代码如上,

我想实现的功能是:初始化时,led灭,定时器定时3s,3s到后,在中断函数里,led去反,变亮,同时关掉定时器中断。

keil软件仿真,达到预计目的,但是下到硬件上就不行。一上电,LED就亮了,根本就没有等到3s。
如果没有关闭定时器那条语句就可以实现3s的led闪灭,但一加这条语句,就定不出3s的时间了,请问为什么啊!!!!
软件怎么试都OK,硬件就是不行


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-3 21:40:51 | 显示全部楼层
STM32的定时器中断,一旦开启,就会莫名其妙的进入一次中断,估计你的问题就出在这里。 
根本就不是3秒时间到才进入中断,而是一开始就进入了。之后你关闭了定时器,从此,不再有中断...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 1 反对 0

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
 楼主| 发表于 2014-3-3 17:14:13 | 显示全部楼层


 


还有让我不理解的就是,用JLink仿真的时候,
执行TIM3->CR1|=0x01;    //使能定时器3
不单单CEN位被置1,怎么UIF位也置1了?还有CCxF位都置1了。UIF位置1说明,产生了中断啊,定时器刚使能就产生中断了啊!那下一步应该跳入中断函数,然后IO口取反,关闭定时器了。
是可以解释硬件上的现象是刚上电就LED亮么?
问题是为何使能定时器的时候,UIF置1呢?是因为下面的UG位吗?


而我在TIM3_Int_Init(u16 arr,u16 psc)中已经对UG位清零了: TIM3->EGR &= 0x00;    //不UG
为何还是出现不理想的结果????
都崩溃了,困在这好几天了..........
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
 楼主| 发表于 2014-3-3 19:38:15 | 显示全部楼层
用示波器测了下,低电平时间只有2ms,远远低于3s。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-3 19:58:57 | 显示全部楼层
回复【3楼】beifengabc:
---------------------------------
正在帮你看,是有问题的,寄存器的BUG。暂时还没找到原因。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
 楼主| 发表于 2014-3-3 20:24:36 | 显示全部楼层
回复【4楼】 xiaoyan :
---------------------------------
多谢版主%>_<%,真是泪奔了...........那想要定时一段时间,而不是周而复始的定时,怎么整?
我最终想要实现的目的是一个定时器(TIM3)定时,另一个定时器(TIM2)用输入捕获在第一个定时器的定时周期内对输入脉冲进行计数。
代码如下:



软件仿真通过,可以成功计数。硬件...........又失败了............我用JLink一步步仿真,结果如下


定时器3初始化后,CEN置1,PORTE.5低电平。
接着定时器2初始化:


可以看到, RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能TIM2时钟          使能TIM2时钟后,TIM3的CEN居然置0了!!而PORTE.5电平翻转为高!
说明TIM2还没初始化完TIM3就进入中断了?我TIM3足足定时了3秒啊!!!
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
 楼主| 发表于 2014-3-3 23:52:02 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
恩恩,库函数版本的定时器刚开启就进入中断知道是怎么回事,寄存器版本这个真心不道了...对UG位清零了: TIM3->EGR &= 0x00;也不行。
不过晚上用库函数调出我想要的结果了,嘿嘿
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
 楼主| 发表于 2014-3-3 23:58:16 | 显示全部楼层
回复【5楼】beifengabc:
---------------------------------
这个...忒坑...用JLink一步一步单步仿真(step into)和中间有的函数跳过的单步仿真(step over)仿真出的结果不一样...自己一直卡在这上面,寻思为什么用JILNK仿出来的结果不对,结果无意中把代码下到板子上跑了一遍,发现功能正常,最后才发现是单步仿真step into和step over的问题
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 06:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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