三 STM32產生PWM的配置方法

2021-09-13 14:29:16 字數 2256 閱讀 8048

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的引數配置

我們引用st官方給出的f10xstd3.5的庫中的tim pwm output中的例程來舉例 可以看出配置pwm引數主要是倆個函式 prescalervalue uint16 t systemcoreclock 24000000 1 time base configuration tim timeb...

stm32 高階定時器產生PWM

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

STM32學習筆記 PWM

a 目的 基礎pwm輸出,以及中斷配合應用。輸出選用pb1,配置為tim3 ch4,是目標板的led6控制腳。b 對於簡單的pwm輸出應用,暫時無需考慮tim1的高階功能之區別。c 初始化函式定義 void tim configuration void 定義tim初始化函式 d 初始化函式呼叫 ti...