STM32之PWM波形輸出配置總結

2021-10-01 14:01:58 字數 3088 閱讀 8714

一.   timer分類:

pwm波形輸出配置總結.html' target='_self'>stm32中一共有11個定時器,其中tim6、tim7是基本定時器;tim2、tim3、tim4、tim5是通用定時器;tim1和tim8是高階定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的systick。

定時器計數器解析度

計數器型別

預分頻係數

產生dma請求

捕獲/比較通道

互補輸出

tim1

tim8

16位向上,向下,向上/向下

1-65536之間的任意數 可以

4 有tim2

tim3

tim4

tim5

16位向上,向下,向上/向下

1-65536之間的任意數 可以

4 沒有

tim6

tim7

16位 向上

1-65536之間的任意數 可以

0 沒有

其中tim1和tim8是能夠產生3對pwm互補輸出,常用於三相電機的驅動,時鐘由apb2的輸出產生。tim2-tim5是普通定時器,tim6和tim7是基本定時器,其時鐘由apb1輸出產生。

二、pwm波形產生的原理:

三、stm32產生pwm的配置方法:

1、配置gpio口:

配置io口的時候無非就是開啟時鐘,然後選擇引腳、模式、速率,最後就是用結構體初始化。不過在32上,不是每乙個io引腳都可以直接使用於pwm輸出,因為在硬體上已經規定了用某些引腳來連線pwm的輸出口。下面是定時器的引腳重映像,其實就是引腳的復用功能選擇:

a.定時器1的引腳復用功能映像:

b.定時器2的引腳復用功能映像:

c.定時器3的引腳復用功能映像:

d.定時器4的引腳復用功能映像:

根據以上重映像表,我們使用定時器3的通道2作為pwm的輸出引腳,所以需要對pb5引腳進行配置,對io口操作**:

gpio_inittypedef gpio_initstructure;//

定義結構體

rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_afio, enable);//

使能gpio外設和afio復用功能模組時鐘

gpio_pinremapconfig(gpio_partialremap_tim3, enable); //

選擇timer3部分重映像

//選擇定時器3的通道2作為pwm的輸出引腳tim3_ch2->pb5 gpiob.5

gpio_initstructure.gpio_pin = gpio_pin_5; //

tim_ch2

gpio_initstructure.gpio_mode = gpio_mode_af_pp; //

復用推挽功能

gpio_initstructure.gpio_speed =gpio_speed_50mhz; gpio_init(gpiob, &gpio_initstructure);//

初始化引腳

2、初始化定時器:

tim_timebaseinittypedef  tim_timebasestructure;//

定義初始化結構體

rcc_apb1periphclockcmd(rcc_apb1periph_tim3, enable); //

使能定時器3時鐘

//初始化tim3

tim_timebasestructure.tim_period = arr; //

自動重裝載暫存器的值

tim_timebasestructure.tim_prescaler =psc; //

timx預分頻的值

tim_timebasestructure.tim_clockdivision = 0; //

時鐘分割

tim_timebasestructure.tim_countermode = tim_countermode_up; //

向上計數

tim_timebaseinit(tim3, &tim_timebasestructure); //

根據以上功能對定時器進行初始化

3、設定tim3_ch2的pwm模式,使能tim3的ch2輸出:

tim_ocinittypedef  tim_ocinitstructure;//

定義結構體

tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2;//

選擇定時器模式,tim脈衝寬度調製模式2

tim_ocinitstructure.tim_outputstate = tim_outputstate_enable;//

比較輸出使能

tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_low;//

輸出比較極性低

tim_oc2init(tim3, &tim_ocinitstructure);//

根據結構體資訊進行初始化

tim_oc2preloadconfig(tim3, tim_ocpreload_enable);  //

使能定時器tim2在ccr2上的預裝載值

4、使能定時器3:

tim_cmd(tim3, enable);  //

使能定時器tim3

經過以上的操作,定時器3的第二通道已經可以正常工作並輸出pwm波了,只是其占空比和頻率都是固定的,我們可以通過改變tim3_ccr2,則可以控制它的占空比。修改占空比的函式為:tim_setcompare2(tim3,n);  n不同,占空比不同。

5、修改pwm波形的占空比:

編寫乙個函式:void tim3_pwm_init(u16 arr,u16 psc);將以上所有的**都加進來這個函式中,只要在main函式中呼叫該函式進行初始化,然後使用tim_setcompare2()函式修改pwm的占空比就可以在pb5腳得到需要的pwm波形了。關於頻率以及占空比的計算方法有以下例子:

int main(void

)

可參考:

stm32 PWM波形輸出多週期的波形設計

一 stm32如何實現乙個pwm波形內具有2個週期 答 在不需要波形輸出時關閉gpiof使能 或者開個定時器定時觸發pwm使能 實現波形設計為 1 pwm.c和pwm.h include pwm.h include led.h include usart.h tim14 pwm部分初始化 pwm輸出...

STM32輸出PWM波教程

pwm輸出配置步驟 舉例 使能定時器3和相關io口時鐘。使能定時器3時鐘 rcc apb1periphclockcmd 使能gpiob時鐘 rcc apb2periphclockcmd 初始化io口為復用功能輸出。函式 gpio init gpio initstructure.gpio mode g...

STM32的PWM輸出實驗

通過設定該暫存器 ccrx 來調整pwm輸出的占空比,如下圖所示 以通道1為例說明pwm的工作過程 首先通過設定ccr1 捕獲比較 值 暫存器 設定設定比較值。然後通過設定ccmr1 oc1m 2 0 位以及ccer cc1p位 輸入 捕獲1輸出極性 來設定高低電平的輸出模式,具體如圖所示 最後設定...