我用到了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
}
|