1. 程式人生 > >關於STM32F103 脈沖計數的問題

關於STM32F103 脈沖計數的問題

init 進行 amp pwm 最終 計數器 rcc 區別 穩定

//TIM2_CH2 PWM部分初始化
//PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預分頻數 計數器功能
void TIM2_ETR_Init(u16 arr,u16 psc)
{
//此部分需手動修改IO口設置
RCC->APB1ENR|=1<<0; //TIM2時鐘使能
RCC->APB2ENR|=1<<2; //使能PORTA時鐘

GPIOA->CRL &= 0XFFFFFF0F; //
GPIOA->CRL |= 0X00000080; //PA1下拉輸入
GPIOA->ODR |= 0<<1;

TIM2->ARR=arr; //設定計數器自動重裝值
TIM2->PSC=psc; //預分頻器不分頻


TIM2->CCMR1|=1<<8; //CC2S=01 選擇輸入端 IC1映射到TI2上
TIM2->CCMR1|=0<<12; //IC2F=0000 配置輸入濾波器 以Fck_int采樣
TIM2->CCMR1|=0<<10; //IC2PS=00 配置輸入分頻,不分頻

TIM2->CCER |=0<<5; //CC2P=0 上升沿捕獲
TIM2->SMCR |=0X07<<0; //SMS =111
TIM2->SMCR |=0X06<<4; //TS =110

TIM2->CR1 |= 0x01; //使能計數器1
}

技術分享

技術分享

  首先我們要先明白,其實定時器就是在對時鐘脈沖的計數的累加,因為定時器的每個時鐘脈沖都是固定並且是可設置,那麽當累加到一定程度的數值時候,再去乘以對應的脈沖寬度,就能計算出脈沖時間了。那麽脈沖計數的道理跟這個一樣,我們只需要將內部時鐘源改為外部時鐘,M3的外部時鐘有兩種模式1和模式2的區別在於極性選擇和分頻器,對於比較穩穩定並且連續的脈沖,建議選擇ETR 觸發;對於其他情況可以選擇TIMX_CHX 捕獲通道對脈沖進行捕獲。

  在STM32中文參考手冊中,同樣給出了配置步驟:

技術分享

  對於脈沖計數,我們不對采集到的脈沖進行計數,ARR重載寄存器的值配置為最大65535,否則計數器CNT一旦到達這個值就會從0開始。最終只需讀取CNT的值就可以知道脈沖的個數了。

關於STM32F103 脈沖計數的問題