|
我用到了TIM4和TIM2,TIM4輸出一個(gè)PWM波,TIM2采用門控模式,當(dāng)TIM4為低電平的時(shí)候,TIM2開始對(duì)外部脈沖進(jìn)行計(jì)數(shù),高電平時(shí)即停止計(jì)數(shù)。目前我在網(wǎng)上看到的,都是主定時(shí)器輸出高電平時(shí),從定時(shí)器進(jìn)行計(jì)數(shù),就像問(wèn)一下如何反過(guò)來(lái)。我的代碼是這樣的:
//TIM4 PWM部分初始化 ST PB7輸出
//PWM輸出初始化
//arr:自動(dòng)重裝值
//psc:時(shí)鐘預(yù)分頻數(shù)
void TIM4_PWM_Init(u16 arr,u16 psc)
{
RCC->APB1ENR|=1<<2; //TIM4時(shí)鐘使能
RCC->APB2ENR|=1<<3; //使能PORTB時(shí)鐘
GPIOB->CRL&=0X0FFFFFFF;
GPIOB->CRL|=0XB0000000; //PB7輸出,復(fù)用功能輸出
TIM4->ARR=arr; //設(shè)定計(jì)數(shù)器自動(dòng)重裝值
TIM4->PSC=psc; //預(yù)分頻器不分頻
TIM4->CCMR1|=7<<12; //CH2 PWM2模式
TIM4->CCMR1|=1<<11; //CH2預(yù)裝載使能
TIM4->CCER|=1<<4; //OC2 輸出使能
TIM4->CR1=0x0080; //ARPE使能
TIM4->CR2|=0x5<<4; //MMS=101
TIM4->CR1|=0x01; //使能定時(shí)器4
}
void TIM2_Int_Init()
{
RCC->APB1ENR|=1<<0; //TIM2時(shí)鐘使能
RCC->APB2ENR|=1<<2; //使能PORTA時(shí)鐘
GPIOA->CRL&=0xfffffff0;
GPIOA->CRL|=0x00000008; //PA0浮空輸入模式
GPIOA->IDR|=1<<1; //PA1上拉
TIM2->SMCR&=~(0xf<<8); //ETF=0000:沒(méi)有濾波
TIM2->SMCR&=~(3<<12); //ETPS=00:不使用預(yù)分頻器
TIM2->SMCR|=0<<15; //ETP=0:外部觸發(fā)極性,ETR不反相,上升沿有效
TIM2->SMCR|=1<<14; //ECE=1:外部時(shí)鐘使能位,使能外部時(shí)鐘模式2。計(jì)數(shù)器由ETRF信號(hào)上的任意有效邊沿驅(qū)動(dòng)
TIM2->SMCR|=0x5<<0; //SMS=101:配置定時(shí)器為門控模式
TIM2->SMCR|=0x3<<4; //TS=011:內(nèi)部觸發(fā)3(ITR3),TIM4
TIM2->CNT = 0x0; //計(jì)數(shù)器清零
TIM2->CR1|=0x1; //使能計(jì)數(shù)器2
}
|
|