打印
[STM32F1]

外部按键开启定时器

[复制链接]
1252|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
复仇之矛|  楼主 | 2015-4-8 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想用一个定时器做一个倒计时,可是总是失败,觉是配置的问题,可是根据中文开发手册找不出问题,请大神指点一下。
u8 count=0;
u8 closetime=0;
void GPIO_Init()
{
        RCC->APB2ENR|=1<<2;     //ʹÄÜPORTAʱÖÓ
        GPIOA->CRL&=0X0FFFFFFF;        //PA7ÉèÖóÉÊäÈ룬ĬÈÏÏÂÀ­          
        GPIOA->CRL|=0X80000000;
        GPIOA->ODR|=1<<7;        //ÉèÖÃΪÉÏÀ­ÊäÈë
}

void TIM3_Int_Init(u16 arr,u16 psc)
{
        RCC->APB1ENR|=1<<1;         //TIM3ʱÖÓʹÄÜ   
        TIM3->ARR=arr;             //É趨¼ÆÊýÆ÷×Ô¶¯ÖØ×°Öµ//¸ÕºÃ1ms   
        TIM3->PSC=psc;             //Ô¤·ÖƵÆ÷7200,µÃµ½10KhzµÄ¼ÆÊýʱÖÓ       

        TIM3->CR1&=0<<4;        //¼ÆÊýÆ÷ÏòÉϼÆÊý
       
        TIM3->CCMR1&=0<<12;     //ͨµÀ2²»ÉèÖò¶»ñÂ˲¨Æ÷
        TIM3->CCMR1|=1<<8;      //Ñ¡ÔñÊäÈ벶»ñÔ´£¬CC2ͨµÀ±»ÅäÖÃΪÊäÈ룬IC2Ó³ÉäÔÚTI2ÉÏ£»
        TIM3->CCER|=1<<5;       //È·¶¨¼«ÐÔ
        TIM3->SMCR|=6<<0;       //ÅäÖö¨Ê±Æ÷Ϊ´¥·¢Ä£Ê½
        TIM3->SMCR|=6<<4;       //ÅäÖÃÑ¡ÔñTI2×÷ΪÊäÈëÔ´¡£µ±TI2³öÏÖÒ»¸öÉÏÉýÑØʱ£¬¼ÆÊýÆ÷¿ªÊ¼ÔÚÄÚ²¿Ê±ÖÓÇý¶¯Ï¼ÆÊý£¬Í¬Ê±ÉèÖÃTIF±ê־루´¥·¢±ê־룩£»
       
  TIM3->DIER|=1<<6;   // ÔÊÐí´¥·¢ÖжϠ      
        //TIM3->DIER|=1<<0;   //ÔÊÐí¸üÐÂÖжϠ         
        TIM3->CR1|=0x01;        //ʹÄܶ¨Ê±Æ÷3
       
          MY_NVIC_Init(1,3,TIM3_IRQn,2);//ÇÀÕ¼1£¬×ÓÓÅÏȼ¶3£¬×é2                                                                         
}


//¶¨Ê±Æ÷3ÖжϷþÎñ³ÌÐò         
void TIM3_IRQHandler(void)
{                
       
        if(TIM3->SR&0X0020)//´¥·¢ÖжÏ
        {
                closetime=1;
                LED1=!LED1;       
    TIM3->DIER|=1<<0;   //ÔÊÐí¸üÐÂÖжÏ
    if(TIM3->SR&0x0001)               
                {
                        TIM3->SR&=~(1<<0);
      count=count+1;
      if(count==30)
                        {
        closetime=0;  //Çл»½çÃæ±êÖ¾
                                TIM3->SR=0;
       }
     }
        }                                  
}
沙发
mmuuss586| | 2015-4-8 18:33 | 只看该作者
参考ST的官方例程就可以了,在此基础上改;

使用特权

评论回复
板凳
mmuuss586| | 2015-4-8 18:34 | 只看该作者
都用寄存器写,看的别人的例程吧;

我喜欢用库函数;

使用特权

评论回复
地板
戈卫东| | 2015-4-8 18:46 | 只看该作者
TIM3->CR1&=0<<4;        //¼ÆÊýÆ÷ÏòÉϼÆÊý
看不懂你的注解,不过,你把0进行移位是想怎么样?不管怎么移位它总是0啊

使用特权

评论回复
5
戈卫东| | 2015-4-8 18:53 | 只看该作者
  if(TIM3->SR&0X0020)//´¥·¢ÖжÏ
/*0X0020 这是保留位啊,你检查这一位是想干什么?它总是读到0啊 ??????????????????*/
        {
                closetime=1;
                LED1=!LED1;      
    TIM3->DIER|=1<<0;   //ÔÊÐí¸üÐÂÖжÏ
    if(TIM3->SR&0x0001)
。。。。。。。。。。。

使用特权

评论回复
6
复仇之矛|  楼主 | 2015-4-8 18:59 | 只看该作者
戈卫东 发表于 2015-4-8 18:53
if(TIM3->SR&0X0020)//´¥·¢ÖжÏ
/*0X0020 这是保留位啊,你检查这一位是想干什么?它总是读到0啊 ...

寄存器写程序是刚刚学的,我的意思是想判断触发中断标志位的。

使用特权

评论回复
7
复仇之矛|  楼主 | 2015-4-8 19:00 | 只看该作者
mmuuss586 发表于 2015-4-8 18:34
都用寄存器写,看的别人的例程吧;

我喜欢用库函数;

定时器的寄存器太多,用库函数看不到寄存器值的变化,所以学着用的:P

使用特权

评论回复
8
戈卫东| | 2015-4-8 21:44 | 只看该作者
你可以先说说你想要做什么。。。。

使用特权

评论回复
9
复仇之矛|  楼主 | 2015-4-9 09:12 | 只看该作者
戈卫东 发表于 2015-4-8 21:44
你可以先说说你想要做什么。。。。

我想用外部按钮启动定时器,然后借助更新中断来实验秒中断,最后实现倒计时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

185

帖子

3

粉丝