求解主从定时器门控模式的问题

2019-07-15 07:33发布

我用到了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
         
}
我想要让这个门控模式  低电平有效,但现在能够实现的是触发源高电平时TIM2才计数,想问一下如何能够实现触发源低电平有效?我试过置TIMx_CCER寄存器中CC1P=1但好像并不行(这里我用的是定时器主从模式进行内部触发)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
zhuzb0754
1楼-- · 2019-07-15 15:59
先用单一的一个试试看
iettke
2楼-- · 2019-07-15 20:31
可以工作在低电平进行工作的。
TIMX_CCER里的 CC1P=1,CC1NP=0才对
kszdj113
3楼-- · 2019-07-16 01:48
如果我用外部触发源的方式,置TIM2_CCER寄存器的CC2P位为1,是可以低电平有效的,但我这里我用了主从模式内部触发的方法好像就不行了。
kszdj113
4楼-- · 2019-07-16 01:52
我之前是直接将输出TIM4的PWM的PB7口接到PA1口进行外部触发的,后来因为PB7口还要接到别的地方所以才改成内部触发的。
我之前外部触发时的TIM2的门控模式设置是这样的。
1.png
但我后来改为内部触发后,发现上面这几个寄存器就不发挥作用了,删了也能运行程序,但是好像只能默认高电平有效。
iettke
5楼-- · 2019-07-16 04:25
 精彩回答 2  元偷偷看……

一周热门 更多>