STM32學習筆記(5) 通用定時器PWM輸出

2021-08-01 02:41:23 字數 3837 閱讀 2314

stm32學習筆記(5):通用定時器pwm輸出

2023年3

月30日timer

輸出pwm1.

timer

輸出pwm

基本概念

脈衝寬度調製

(pwm)

,是英文「

pulse width modulation

」的縮寫,簡稱脈寬調變,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單一點,就是對脈衝寬度的控制。一般用來控制步進電機的速度等等。

stm32

的定時器除了

tim6

和tim7

之外,其他的定時器都可以用來產生

pwm輸出,其中高階定時器

tim1

和tim8

可以同時產生7路的

pwm輸出,而通用定時器也能同時產生4路的

pwm輸出。

1.1 pwm

輸出模式

stm32

的pwm

輸出有兩種模式,模式

1和模式2,由

timx_ccmrx

暫存器中的

ocxm

位確定的(「

110」為模式1,「

111」為模式

2)。模式

1和模式

2的區別如下:

110:

pwm模式

1-在向上計數時,一旦

timx_cnt時通道

1為有效電平,否則為無效電平;在向下計數時,一旦

timx_cnt>timx_ccr1

時通道1

為無效電平

(oc1ref=0)

,否則為有效電平

(oc1ref=1)

。111

:pwm模式2

-在向上計數時,一旦

timx_cnt時通道

1為無效電平,否則為有效電平;在向下計數時,一旦

timx_cnt>timx_ccr1

時通道1

為有效電平,否則為無效電平。

由此看來,模式

1和模式

2正好互補,互為相反,所以在運用起來差別也並不太大。

而從計數模式上來看,

pwm也和

timx

在作定時器時一樣,也有向上計數模式、向下計數模式和中心對齊模式,關於

3種模式的具體資料,可以檢視《

stm32

參考手冊》的「

14.3.9 pwm

模式」一節,在此就不詳細贅述了。

1.2 pwm

輸出管腳

pwm的輸出管腳是確定好的,具體的引腳功能可以檢視《

stm32

參考手冊》的「

8.3.7

定時器復用功能重對映」一節。在此需要強調的是,不同的

timx

有分配不同的引腳,但是考慮到管腳復用功能,

stm32

提出了乙個重映像的概念,就是說通過設定某一些相關的暫存器,來使得在其他非原始指定的管腳上也能輸出

pwm。但是這些重映像的管腳也是由參考手冊給出的。比如說

tim3的第2

個通道,在沒有重映像的時候,指定的管腳是

pa.7

,如果設定部分重映像之後,

tim3_ch2

的輸出就被對映到

pb.5

上了,如果設定了完全重映像的話,

tim3_ch2

的輸出就被對映到

pc.7

上了。1.3

pwm輸出訊號

pwm輸出的是乙個方波訊號,訊號的頻率是由

timx

的時鐘頻率和

timx_arr

預分頻器所決定的,具體設定方法在前面乙個學習筆記中有詳細的交代。而輸出訊號的占空比則是由

timx_crrx

暫存器確定的。其公式為「占空比

=(timx_crrx/timx_arr)*100%

」,因此,可以通過向

crr中填入適當的數來輸出自己所需的頻率和占空比的方波訊號。

2. timer

輸出pwm

實現步驟

1. 設定

rcc時鐘;

2. 設定

gpio

時鐘;3.

設定timx

定時器的相關暫存器;

4. 設定

timx

定時器的

pwm相關暫存器。第1

步設定rcc

時鐘已經在前文中給出了詳細的**,在此就不再多說了。需要注意的是通用定時器

timx

是由apb1

提供時鐘,而

gpio

則是由apb2

提供時鐘。注意,如果需要對

pwm的輸出進行重映像的話,還需要開啟引腳復用時鐘

afio。第

2步設定

gpio

時鐘時,

gpio

模式應該設定為復用推挽輸出

gpio_mode_af_pp

,如果需要引腳重映像的話,則需要用

gpio_pinremapconfig()

函式進行設定。第3

步設定timx

定時器的相關暫存器時,和前一篇學習筆記一樣,設定好相關的

timx

的時鐘和技術模式等等。具體設定參看「

timer

基本定時功能」的學習筆記。第4

步設定pwm

相關暫存器,首先要設定

pwm模式(預設情況下

pwm是凍結的),然後設定占空比(根據前面所述公式進行計算),再設定輸出比較極性:當設定為

high

時,輸出訊號不反相,當設定為

low時,輸出訊號反相之後再輸出。最重要是是要使能

timx

的輸出狀態和使能

timx

的pwm

輸出使能。

相關設定完成之後,就可以通過

tim_cmd()

來開啟timx

定時器,從而得到

pwm輸出了。

3. timer

輸出pwm

源**由於我現在手上的奮鬥開發板是將

pb.5

接到led

上,因此需要使用

tim3

的ch2

通道,並且要進行引腳重映像。開啟

tim3

之後,pwm

輸出,使得

led點亮,通過改變

pwm_cfg()

中的占空比可以調節

led的亮度。

#include "stm32f10x_lib.h"

void rcc_cfg();

void gpio_cfg();

void timer_cfg();

void pwm_cfg(); //

占空比,取值範圍為

0-100

int dutyfactor = 50;

int main()

void rcc_cfg()

//開啟

tim3

的時鐘 rcc_apb1periphclockcmd(rcc_apb1periph_tim3,enable);

//開啟gpiob

的時鐘和復用功能

rcc_apb2periphclockcmd(rcc_apb2periph_gpiob | rcc_apb2periph_afio,enable); }

void gpio_cfg()

void timer_cfg()

void pwm_cfg()

stm32通用定時器

stm32的定時器是個強大的模組,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做pwm輸出或者輸入捕獲功能。時鐘源問題 名為timx的有八個,其中tim1和tim8掛在apb2匯流排上,而tim2 tim7則掛在 apb1匯流排上。其中tim1 tim8稱為高階控制定時器 adva...

STM32通用定時器配置

stm32通用定時器配置 一 stm32 通用定時器原理 stm32 系列的cpu 有多達8 個定時器,其中tim1 和tim8 是能夠產生三對pwm 互補輸出的高階定時器,常用於三相電機的驅動,它們的時鐘由apb2 的輸出產生。其它6 個為普通定時器,時鐘由apb1 的輸出產生。下圖是stm32參...

STM32 通用定時器基本定時功能

1.stm32的timer簡介 stm32中一共有11個定時器,其中2個高階控制定時器,4個普通定時器和2個基本定時器,以及2個看門狗定時器和1個系統嘀嗒定時器。其中系統嘀嗒定時器是前文中所描述的systick,看門狗定時器以後再詳細研究。今天主要是研究剩下的8個定時器。定時器計數器解析度 計數器型...