我用到了TIM4和TIM2,TIM4輸出一個PWM波,TIM2采用門控模式,當TIM4為低電平的時候,TIM2開始對外部脈沖進行計數(shù),高電平時即停止計數(shù)。目前我在網(wǎng)上看到的,都是主定時器輸出高電平時,從定時器進行計數(shù),就像問一下如何反過來。我的代碼是這樣的:
//TIM4 PWM部分初始化 ST PB7輸出
//PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預分頻數(shù)
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; //設定計數(shù)器自動重裝值
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:外部觸發(fā)極性,ETR不反相,上升沿有效
TIM2->SMCR|=1<<14; //ECE=1:外部時鐘使能位,使能外部時鐘模式2。計數(shù)器由ETRF信號上的任意有效邊沿驅(qū)動
TIM2->SMCR|=0x5<<0; //SMS=101:配置定時器為門控模式
TIM2->SMCR|=0x3<<4; //TS=011:內(nèi)部觸發(fā)3(ITR3),TIM4
TIM2->CNT = 0x0; //計數(shù)器清零
TIM2->CR1|=0x1; //使能計數(shù)器2
}
|