关于主从定时器门控模式的问题 ,像求助一下各位

2019-07-21 06:09发布

我用到了TIM4和TIM2,TIM4输出一个PWM波,TIM2采用门控模式,当TIM4为低电平的时候,TIM2开始对外部脉冲进行计数,高电平时即停止计数。目前我在网上看到的,都是主定时器输出高电平时,从定时器进行计数,就像问一下如何反过来。我的代码是这样的:

//TIM4 PWM部分初始化        ST    PB7输出
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM4_PWM_Init(u16 arr,u16 psc)
{  
        RCC->APB1ENR|=1<<2;         //TIM4时钟使能   
        RCC->APB2ENR|=1<<3;            //使能PORTB时钟       
        GPIOB->CRL&=0X0FFFFFFF;       
        GPIOB->CRL|=0XB0000000;        //PB7输出,复用功能输出                    
          
        TIM4->ARR=arr;                        //设定计数器自动重装值
        TIM4->PSC=psc;                        //预分频器不分频
       
        TIM4->CCMR1|=7<<12;          //CH2 PWM2模式                 
        TIM4->CCMR1|=1<<11;         //CH2预装载使能          
        TIM4->CCER|=1<<4;           //OC2 输出使能          
        TIM4->CR1=0x0080;           //ARPE使能
        TIM4->CR2|=0x5<<4;        //MMS=101
        TIM4->CR1|=0x01;            //使能定时器4
}



void TIM2_Int_Init()
{
        RCC->APB1ENR|=1<<0;         //TIM2时钟使能   
        RCC->APB2ENR|=1<<2;            //使能PORTA时钟       
       
  GPIOA->CRL&=0xfffffff0;       
        GPIOA->CRL|=0x00000008;        //PA0浮空输入模式  
        GPIOA->IDR|=1<<1;       //PA1上拉
       
        TIM2->SMCR&=~(0xf<<8);    //ETF=0000:没有滤波
        TIM2->SMCR&=~(3<<12);     //ETPS=00:不使用预分频器
  TIM2->SMCR|=0<<15;        //ETP=0:外部触发极性,ETR不反相,上升沿有效
        TIM2->SMCR|=1<<14;        //ECE=1:外部时钟使能位,使能外部时钟模式2。计数器由ETRF信号上的任意有效边沿驱动
        TIM2->SMCR|=0x5<<0;       //SMS=101:配置定时器为门控模式
        TIM2->SMCR|=0x3<<4;       //TS=011:内部触发3(ITR3),TIM4  

        TIM2->CNT = 0x0;      //计数器清零
        TIM2->CR1|=0x1;            //使能计数器2
       
}


0条回答

一周热门 更多>