1、晶元輸出pwm波形打碼步驟
1.0主函式
int main(void)1.1初始化輸出pwm波形的定時器和io口(例程使用定時器1的通道1,輸出在pa8)}
gpio_inittypedef gpio_initure;1.2初始化定時器1,hal庫中,使用定時器的 pwm 輸出功能時, hal 庫為我們提供了乙個獨立的定時器初始化函式 hal_tim_pwm_init ()__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);
tim_handletypedef tim1_handler; //1.3初始化通道並開啟pwm定時器控制代碼
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
tim_oc_inittypedef tim1_ch1handler; //1.4提供設定比較值的函式定時器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
//2、輸出pwm原理及**解釋設定tim1通道1的占空比
//compare:比較值
void
tim_settim1compare1(u32 compare)
設定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; //選擇的pwm模式:pwm模式1:計數值<比較值時輸出有效電平,計數值>比較值輸出無效電平。模式選擇pwm1
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 最多可以同時產生...