STM32F103 PWM輸出實驗(HAL庫)

2022-05-04 09:00:10 字數 3029 閱讀 4376

1、晶元輸出pwm波形打碼步驟

1.0主函式

int main(void) 

}

1.1初始化輸出pwm波形的定時器和io口(例程使用定時器1的通道1,輸出在pa8)

gpio_inittypedef gpio_initure;

__hal_rcc_tim1_clk_enable();

//使能定時器1

__hal_rcc_gpioa_clk_enable(); //

開啟gpioa時鐘

gpio_initure.pin=gpio_pin_8; //

pa8gpio_initure.mode=gpio_mode_af_pp; //

復用推挽輸出

gpio_initure.pull=gpio_pullup; //

上拉gpio_initure.speed=gpio_speed_high; //

高速hal_gpio_init(gpioa,&gpio_initure);

1.2初始化定時器1,hal庫中,使用定時器的 pwm 輸出功能時, hal 庫為我們提供了乙個獨立的定時器初始化函式 hal_tim_pwm_init ()

tim_handletypedef     tim1_handler;          //

定時器控制代碼

tim1_handler.instance=tim1; //

定時器1

tim1_handler.init.prescaler=psc; //

定時器分頻

tim1_handler.init.countermode=tim_countermode_up;//

向上計數模式

tim1_handler.init.period=arr; //

自動重裝載值

tim1_handler.init.clockdivision=tim_clockdivision_div1;

hal_tim_pwm_init(&tim1_handler); //

初始化pwm

1.3初始化通道並開啟pwm

tim_oc_inittypedef     tim1_ch1handler;    //

定時器1通道1控制代碼

tim1_ch1handler.ocmode=tim_ocmode_pwm1; //

模式選擇pwm1

tim1_ch1handler.pulse=arr/2; //

設定比較值,此值用來確定占空比,預設比較值為自動重裝載值的一半,即占空比為50%

tim1_ch1handler.ocpolarity=tim_ocpolarity_high; //

輸出比較極性為高

hal_tim_pwm_configchannel(&tim1_handler,&tim1_ch1handler,tim_channel_1);

//配置tim1通道1

hal_tim_pwm_start(&tim1_handler,tim_channel_1);//

開啟pwm通道1

1.4提供設定比較值的函式

//

設定tim1通道1的占空比

//compare:比較值

void

tim_settim1compare1(u32 compare)

2、輸出pwm原理及**解釋

設定pwm週期和乙個比較值,技術過程中比較值和計數值進行比較,判斷輸出有效電平還是無效電平,達到輸出pwm波的目的。

如圖crrx是比較值,arr是重灌值(達到該值重灌為0)

2.1時鐘和io口初始化略。

2.2在定時器初始化中。

tim1_handler.init.prescaler=psc;           //

定時器分頻

所述分頻將時鐘頻率分為更小的頻率,如stm32f103是設定72m的時鐘頻率,設定psc=72分頻,得到1m時鐘頻率。

tim1_handler.init.period=arr;              //

自動重裝載值

在設定arr=20000重灌初值,由公式1m/20000=50hz,即週期t=20ms 。

tim1_handler.init.countermode=tim_countermode_up;//

向上計數模式

設定計數方式為向上計數逐一增加從0到19999。此時得到的是20ms就重灌初值的定時器。

2.3在通道1初始化及pwm開啟**中

tim1_ch1handler.ocmode=tim_ocmode_pwm1; //

模式選擇pwm1

選擇的pwm模式:pwm模式1:計數值<比較值時輸出有效電平,計數值>比較值輸出無效電平。

tim1_ch1handler.pulse=arr/2;            //

設定比較值,此值用來確定占空比,預設比較值為自動重裝載值的一半,即占空比為50%

設定比較值,供計數值比較。

tim1_ch1handler.ocpolarity=tim_ocpolarity_high; //

輸出比較極性為高

設定有效電平是高電平還是低電平。

3、總結

本文章主要講述了hal庫輸出pwm波形的**編寫,提供了改變比較值的函式,使使用者可以動態的改變pwm並行占空比。

stm32 f103 pwm 深入解析

定時器使用的時鐘源都是timxclk,時鐘源經過psc預分頻器輸入至脈衝計數器timx cnt,基本定時器只能工作在向上計數模式,在過載暫存器timx arr中儲存的是定時器的溢位值。工作時,脈衝計數器timxcnt,由時鐘觸發進行計數,當timxcnt的計數值x等於過載暫存器timxarr中儲存的...

基於stm32f103 PWM波 的配置問題

usart串列埠,首先tx是作為輸出的,邏輯上輸出的資料都是0或者1,也就是由高低電平來表示,推挽就是能穩定輸出1或者0。而復用,是因為這個io受的是內部的的usart模組來控制,並非是gpio暫存器來控制。至於rx設定為浮空輸入那就很好理解了,首先接收的肯定是要設定為輸入,才能檢測外界的電平,其次...

STM32F103學習筆記 (八) PWM輸出

脈衝寬度調製 pwm 是對脈衝寬度的控制。stm32 的定時器除了 tim6 和 7。其他的定時器都可以用來產生 pwm 輸出。其中高階定 時器 tim1 和 tim8 可以同時產生多達 7 路的 pwm 輸出。而通用定時器也能同時產生多達 4 路的 pwm 輸出,這樣,stm32 最多可以同時產生...