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...