我用到了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但好像并不行(这里我用的是定时器主从模式进行内部触发)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
TIMX_CCER里的 CC1P=1,CC1NP=0才对
我之前外部触发时的TIM2的门控模式设置是这样的。
但我后来改为内部触发后,发现上面这几个寄存器就不发挥作用了,删了也能运行程序,但是好像只能默认高电平有效。
一周热门 更多>