OpenEdv-开源电子网

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

如何不断开启关闭定时器3

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-5-29
在线时间
0 小时
发表于 2012-5-29 04:27:01 | 显示全部楼层 |阅读模式
比如说我一开始开启了定时器3,然后我隔一段时间需要关闭,再过一段时间我又要开启,然后是重新赋初值的。。
TIM3->CR1&=0xfe;    //关闭定时器3
TIM3->CR1|=0x01;    //使能定时器3
用这两句不行,怎么解决,求高手解决
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-4-12
在线时间
0 小时
发表于 2015-7-6 17:17:09 | 显示全部楼层
回复【20楼】正点原子:
---------------------------------
原子哥:打开和关闭定时器,需要重新计数,是不是重新写入:TIMX->CNT = 0????谢谢
回复 支持 1 反对 0

使用道具 举报

38

主题

527

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1424
金钱
1424
注册时间
2011-11-27
在线时间
122 小时
发表于 2012-5-29 09:16:04 | 显示全部楼层
回复【楼主位】sxh0800210135:
---------------------------------
//”PWM输出初始化
 //arr:自动重装值
 //psc:时钟预分频数
 void WM_Init(u16 arr,u16 psc)
 {         
 //此部分需手动修改IO口设置
  RCC->APB1ENR|=1<<1;       //TIM3时钟使能    

 GPIOA->CRH&=0XFFFFFFF0;//PA8输出
  GPIOA->CRH|=0X00000004;//浮空输入
     
  GPIOA->CRL&=0X0FFFFFFF;//PA7输出
  GPIOA->CRL|=0XB0000000;//复用功能输出    
 GPIOA->ODR|=1<<7;//PA7上拉 
 
 TIM3->ARR=arr;//设定计数器自动重装值 
 TIM3->SC=psc;//预分频器不分频
  
  TIM3->CCMR1|=7<<12;  //CH2 WM2模式   
 TIM3->CCMR1|=1<<11; //CH2预装载使能    

 TIM3->CR1=0x8000;   //ARPE使能  
 TIM3->CR1|=0x01; //使能定时器3        


TIM3->CR1=0x8000;   //ARPE使能   
这句话,默认就把CR1的最低位给关了。
改为:TIM3->CR1|=0x80;    //ARPE自动装载使能

永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-5-29 13:00:52 | 显示全部楼层
回复【楼主位】sxh0800210135:
---------------------------------
你说的是可以关闭开启的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-5-29
在线时间
0 小时
 楼主| 发表于 2012-5-29 14:24:08 | 显示全部楼层
可以关闭,但是不能重新装载初值
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2012-5-29
在线时间
0 小时
 楼主| 发表于 2012-5-29 14:24:32 | 显示全部楼层
重新开启的时候我想让初值重新载入
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2012-5-29 22:31:41 | 显示全部楼层
回复【5楼】sxh0800210135:
---------------------------------
直接TIMx->CNT=你要的值.就完了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2013-12-6
在线时间
0 小时
发表于 2014-3-3 15:26:27 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,还是之前我说的定时器中断的问题:定时3秒,进入中断,IO翻转,关定时器。
之前用的库函数,今天试了下寄存器的方法。还是不行
代码:
int main(void)
{     
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600);   //串口初始化为9600
delay_init(72);       //延时初始化 
LED_Init();    //初始化与LED连接的硬件接口
  TIM3_Int_Init(29999,7199);//10Khz的计数频率,计数5K次为500ms  
    while(1)
{
delay_ms(200);    
}
}

void TIM3_Int_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能    
  TIM3->ARR=arr;   //设定计数器自动重装值//刚好1ms    
TIM3->SC=psc;   //预分频器7200,得到10Khz的计数时钟   
TIM3->DIER|=1<<0;   //允许更新中断   
TIM3->CR1|=0x01;    //使能定时器3
   MY_NVIC_Init(1,0,TIM3_IRQChannel,2);//抢占1,子优先级0,组2  
}

void TIM3_IRQHandler(void)
{              
if(TIM3->SR&0X0001)//溢出中断
{
LED1=!LED1;
                   
}    
TIM3->SR&=~(1<<0);//清除中断标志位 
TIM3->CR1&=0<<0;    //关闭定时器3     
}

你给的例程里是没有关闭定时器这条代码的。可以实现3s的LED交替亮灭。
这里,我想让LED灭3s,然后常亮,所以加了关闭定时器这条代码。但是现象却是,刚上电,LED就亮,根本就没有等3s后再亮。
求您在开发板上试下吧,我在这困住很久了..用软件仿真都可以,就是硬件不行...这个定时器定时关闭的问题不解决,我下面的工作都没法往下进行..感觉很简单的东西,就是关个定时器,不知道为什么就不行...........
回复 支持 反对

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

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




代码如上!!真是不知道原因在哪了,困了很多天了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

7

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-2-19
在线时间
0 小时
发表于 2014-5-7 22:34:39 | 显示全部楼层
关闭定时器:TIM3->CR1 &= ~(0x01); 
 开启定时器:TIM3->CR1 |= 0x01;
一代龙影-KPL
回复 支持 反对

使用道具 举报

16

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2011-10-1
在线时间
0 小时
发表于 2014-6-2 16:35:39 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子哥,怎么能解决 定时器一开始就进中断的这个问题? 通过好多设置还是不行啊。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-6-2 20:51:46 | 显示全部楼层
这个我也没办法…
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

23

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2014-3-9
在线时间
103 小时
发表于 2014-7-24 10:01:35 | 显示全部楼层
寄存器怎样直接获取定时器当前计数值
魔法王子
回复 支持 反对

使用道具 举报

10

主题

50

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-11-6
在线时间
24 小时
发表于 2014-11-7 01:11:34 | 显示全部楼层
回复【11楼】一世的约定:
---------------------------------
http://www.openedv.com/posts/list/41019.htm
回复 支持 反对

使用道具 举报

10

主题

50

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
291
金钱
291
注册时间
2014-11-6
在线时间
24 小时
发表于 2014-11-7 01:14:39 | 显示全部楼层
http://www.openedv.com/posts/list/41019.htm

朋友,这里提到的问题就是你的这个情况
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2011-8-31
在线时间
2 小时
发表于 2014-11-16 20:51:20 | 显示全部楼层
5楼原子哥的回复切中要害,直接解决问题,这也是我最近的一个困惑,非常感谢,牛!
回复 支持 反对

使用道具 举报

16

主题

50

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2011-10-1
在线时间
0 小时
发表于 2014-12-28 21:28:56 | 显示全部楼层
回复【14楼】草莽:
---------------------------------
我看了下,你的思路是那个莫名其妙的进中断,在这里是进到了软件更新事件里,然后又被清除标志位,最后配置更新中断后,自然不会再有自动进中断。。
回复 支持 反对

使用道具 举报

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-2-26
在线时间
26 小时
发表于 2015-4-24 10:55:33 | 显示全部楼层
回复【10楼】DDL-龙:
---------------------------------
正解!!!!!!!!
回复 支持 反对

使用道具 举报

6

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-4-12
在线时间
0 小时
发表于 2015-6-13 16:15:09 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥:我用定时器做超时判断,打开和关闭定时器时,会重新计数吗??
打开:TIM4->CR1 |= (1 << 0);     
关闭:TIM4->CR1  &= ~(1 << 0);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-6-17 01:02:03 | 显示全部楼层
回复【19楼】dongxinwanwu:
---------------------------------
不会
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-6 22:41:40 | 显示全部楼层
回复【21楼】dongxinwanwu:
---------------------------------
可以,简单高效
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2016-1-28
在线时间
72 小时
发表于 2016-4-10 15:34:28 | 显示全部楼层
正点原子 发表于 2014-3-3 21:39
STM32的定时器中断,一旦开启,就会莫名其妙的进入一次中断,估计你的问题就出在这里。
根本就不是3秒时间 ...

原子哥,定时器一旦开启会莫名其妙进一次中断,这个Bug怎么解决,求回复,谢谢
回复 支持 反对

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
408
金钱
408
注册时间
2016-1-28
在线时间
72 小时
发表于 2016-4-10 18:33:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
375
金钱
375
注册时间
2016-9-26
在线时间
59 小时
发表于 2016-12-25 12:39:09 | 显示全部楼层
好人
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 11:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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