stm32定時器pwm模式輸入捕獲

2021-07-23 10:29:17 字數 1966 閱讀 8044

stm32中的定時器,除了tim6和tim7,其他定時器都有輸入捕獲功能。這種模式通常用在對輸入訊號頻率frequency、占空比duty、高低脈寬的計算中,具有很廣泛的用途。

stm32的輸入捕獲,簡單的說就是通過檢測timx_chx上的邊沿訊號,在邊沿訊號發生跳變(比如上公升沿/下降沿)的時候,將當前定時器的值(timx_cnt)存放到對應的通道的捕獲/比較寄存(timx_ccrx)裡面,完成一次捕獲。同時還可以配置捕獲時是否觸發中斷/dma 等。

pwm模式捕獲方法:利用tim3_ch1作pwm輸出,tim2_ch2捕獲上述pwm訊號,並測出頻率和占空比。設定pwm頻率為1khz,占空比50%。

具體步驟:

為了實現pwm輸入捕獲,tim2占用了2個通道。第2通道的電平變化會被第一通道和第二通道引腳檢測到,其中第一通道被設定為從機模式(如何快速判別主從機模式,規則如下:如果設定的是第二通道作為pwm輸入捕獲,則剩餘的第一通道都為從機,反之亦然)。

假設輸入的pwm從低電平開始跳變,在第乙個上公升沿到來時,1,2通道同時檢測到上公升沿。而從機設定為復位模式,所以將tim2的計數值復位至0,此時不會產生乙個中斷請求。

下乙個到來的電平是下降沿,此時通道1發生捕獲事件,將計數值存入通道1的ccr1裡。

然後是第二個上公升沿到來後,此時通道2發生捕獲事件,將此時的計數值存入通道2的ccr2裡。復位模式此時又將tim2計數值復位至0,等待第二個下降沿到來。

一次捕獲過程完成,則pwm的頻率f=72m/ccr2;占空比:duty=(ccr1/ccr2) x100%

注:

pwm輸入模式時,用到兩個通道(一般用timx_ch1或timx_ch2),只給其中乙個通道分配gpio時鐘即可,另乙個在內部使用。給乙個通道分配gpio時鐘後,需要設定另乙個為從機且復位模式。(例如使用ch2,ch1就得設定成從機模式)。當乙個輸入訊號(ti1或ti2)來臨時,主通道捕獲上公升沿,從機捕獲下降沿。

在ch2通道中:

ti2fp1和ti2fp2都來自同一訊號ti2 的邊沿檢測,訊號相同,同乙個tix輸入映**兩個icx訊號。

ti2fp1和ti2fp2可以分別由連線到的icx (ic1或是ic2)相對應的控制暫存器設為上公升沿或是下降沿觸發,這兩個icx訊號分別在相反的極性邊沿有效。如果ti2fp2設定為上公升沿觸發,則ti2fp1設定為下降沿觸發,二者極性相反。

ch1,3,4相同。

具體程式:

include 「pbdata.h」

void rcc_configuration(void);

void gpio_configuration(void);

void nvic_configuration(void);

void tim2_configuration(void);

void tim3_configuration(void);

void usart_configuration(void);

int fputc(int ch,file *f)

int main(void)} }

void rcc_configuration(void)

void gpio_configuration(void)

void tim2_configuration(void)

void tim3_configuration(void)

//中斷程式

void tim2_irqhandler(void)

}duty和freq是定義的全域性變數

extern u32 duty;

extern u16 freq;

u32 duty=0;

u16 freq=0;

經除錯程式可用。頻率和占空比都對。頻率的設定不要太高,因為printf函式發數所需時間較多,兩次捕獲的時間間隔短的話可能使printf不能及時地送出資料,造成資料被重新整理。更改方法,使用:usart_senddata();函式發數。

stm32 高階定時器產生PWM

用stm32的高階定時器tim1和tim8產生pwm,需要注意 1.都有tim1,但只有flash容量大於256k的大容量微控制器才有tim8 2.高階定時器相對於通用定時器,多了tim ctrlpwmoutputs tim8,enable tim1產生四路pwm程式 static void tim...

STM32定時器輸出 捕獲PWM

硬體 德飛萊stm32f407 功能 tim4 ch1 pb6輸出pwm,tim3 ch1 pc6捕獲高電平時間 include timer.h void tim4 pwm init void void tim3 cap init void tim3 ch1定時器獲取 u8 tim3 irq sta...

stm32定時器之pwm輸出

stm32定時器之pwm輸出 新手上路,希望大家指教 使用定時器輸出pwm就是操作標準庫來實現,就像點亮led燈操作gpio類似 函式名稱timx pwm init 對某個定時器進行初始化 我們初始化函式中有這幾步 1 首先就是要開啟時鐘,所有的定時器都掛在了apb1上,所以我們要開啟時鐘,2 確定...