STM32 PWM實戰例子 精煉講解

2021-10-07 06:28:35 字數 1599 閱讀 1874

例子:

使用定時器14的pwm功能,輸出占空比可變的pwm波,用來驅動led燈,從而達到led【pf9]亮度由暗變亮,又從亮變暗,如此迴圈。

pwm輸出配置步驟:

使能定時器14和相關io口時鐘。

使能定時器14時鐘:rcc_apb1periphclockcmd();

使能gpiof時鐘:rcc_ahb1periphclockcmd ();

初始化io口為復用功能輸出。函式:gpio_init();

gpio_initstructure.gpio_mode = gpio_mode_af; //復用功能

gpiof9復用對映到定時器14

gpio_pinafconfig(gpiof,gpio_pinsource9,gpio_af_tim14);

初始化定時器:arr,psc等:tim_timebaseinit();

初始化輸出比較引數:tim_oc1init();

使能預裝載暫存器: tim_oc1preloadconfig(tim14, tim_ocpreload_enable);

使能自動重裝載的預裝載暫存器允許位tim_arrpreloadconfig(tim14,enable);

使能定時器,tim_cmd()。

不斷改變比較值ccrx,達到不同的占空比效果:tim_setcompare1();

pwm最核心的兩個步驟為 初始化定時器和初始化輸出比較引數。下面我將具體的講解這連個步驟中重要引數的含義。

(預備知識)pwm工作過程

初始化定時器

我們初始化定時器中重要的兩個引數是arr,psc。而這兩個引數已經被用到timx_pwm_init(u32 arr,u32 psc)上啦。

arr:自動重裝載值

簡單來講就是在完成乙個週期後,我們將cnt的數值設定為多少?而這個值就是arr。

psc:分頻係數

簡單來講就是將我們的時鐘頻率縮小(psc+1)倍。

頻率計算公式:

f = 對應的時鐘頻率/((arr+1)(psc+1))

注:對應的時鐘頻率是要看你的定時器所對應的時鐘啦

初始化輸出比較引數

typedef struct

tim_ocinittypedef;

一般pwm配置,只用到結構體中的四個引數。

tim_ocmode:

模式一:當cnt小於ccrx時,才為有效電平。

模式二:當cnt小於ccrx時,才為有效電平。

tim_outputstate

設定輸出使能

tim_pulse:

設定ccrx的值

tim_ocpolarity:

輸出比較極性高:把有效電平輸出出來變成了高電平

輸出比較極性低:把有效電平輸出出來變成了低電平

STM32 PWM原理總結

pwm的工作原理 假如我們要讓乙個led燈由暗到亮,就需要不斷的改變ccrx的值,也就是改變占空比。如果我們改變led燈由暗到亮的速度,我們就需要改變arr的值。pwm配置相關暫存器 使用通用定時器的pwm功能,除了配置一般定時器的方式之外,還需要三種暫存器來控制 捕獲 比較暫存器 timx ccr...

STM32 PWM控制詳解

include sys.h 定時器3,可產生四路的pwm輸出,四個通道分別對應的引腳情況如下 tim3 ch1,tim3 ch2,tim3 ch3,tim3 ch4 沒有重映像的對應情況 pa6,pa7,pb0,pb1 部分重映像 pb4,pb5,pb0,pb1 完全重映像 pc6,pc7,pc8,...

STM32 PWM輸出設定

計數器暫存器 timx cnt 預分頻器暫存器 timx psc 自動裝載暫存器 timx arr 重複次數暫存器 timx rcr 當timx cnt如果timx ccrx中的比較值大於自動重裝載值 timx arr 則ocxref保持為 1 如果比較值為0,則ocxref保持為 0 自動裝載暫存...