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

2019-10-15 22:54发布

比如说我一开始开启了定时器3,然后我隔一段时间需要关闭,再过一段时间我又要开启,然后是重新赋初值的。。
TIM3->CR1&=0xfe;    //关闭定时器3
TIM3->CR1|=0x01;    //使能定时器3
用这两句不行,怎么解决,求高手解决
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
科科1987
1楼-- · 2019-10-16 02:21
回复【楼主位】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自动装载使能

正点原子
2楼-- · 2019-10-16 06:11
 精彩回答 2  元偷偷看……
sxh0800210135
3楼-- · 2019-10-16 10:35
可以关闭,但是不能重新装载初值
sxh0800210135
4楼-- · 2019-10-16 12:20
重新开启的时候我想让初值重新载入
正点原子
5楼-- · 2019-10-16 12:32
回复【5楼】sxh0800210135:
---------------------------------
直接TIMx->CNT=你要的值.就完了.
beifengabc
6楼-- · 2019-10-16 17:23
回复【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后再亮。
求您在开发板上试下吧,我在这困住很久了..用软件仿真都可以,就是硬件不行...这个定时器定时关闭的问题不解决,我下面的工作都没法往下进行..感觉很简单的东西,就是关个定时器,不知道为什么就不行...........

一周热门 更多>