1 STM32定時器輸出5路PWM

2021-10-25 05:23:19 字數 1961 閱讀 7843

一、stm32定時器簡介

stm32共有8個定時器,tim1~tim8。包括兩個高階控制定時器,tim1和tim8;四個通用計時器,tim2、tim3、tim4、tim5;兩個基本定時器,tim6、tim7。

其中除了tim6和tim7以外的其他定時器都可用來產生pwm輸出。而每個高階控制定時器有7個通道,每個通用計時器也有4個通道,因此最多可以同時產生 30 路 pwm 輸出。

二、此例簡介

完成的功能:簡單地使用多個定時器輸出5路pwm

晶元:stm32f103rct6

硬體:5個小燈,正點原子mini開發板

三、**

1.main函式

int

main

(void

)

2.定時器初始化函式(以定時器二為例)

void

tim2_pwm_init

(u16 arr,u16 psc)

3.比較輸出函式

void

tim_setcompare3

(tim_typedef* timx,

uint16_t compare3)

###########################################

注釋:1️⃣為什麼執行tim_setcompare3(tim2,90);輸出的就是90%的亮度?

先解釋一下pwm輸出的頻率,執行語句tim2_pwm_init(899,1);即把arr的值設定為899,psc設定為1(2分頻),那麼定時器輸出pwm的頻率為72mhz÷[(psc+1)×(arr+1)]=72mhz÷[(899+1)×(1+1)]=40000hz,這個頻率只要大於50hz即可。因為大於50hz時,人眼就感覺不到燈在閃爍。頻率與亮度無關。

跟亮度有關的是脈衝寬度,在程式中,我們設定:

高電平為有效電平(tim_ocinitstructure.tim_ocpolarity=tim_ocpolarity_high;),

pwm模式為模式二(tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2;),

向上計數模式(tim_timebasestructure.tim_countermode = tim_countermode_up;),

ccr的值為90(tim_setcompare3(tim2,90);),

cnt在0~899(arr值)之間計數,當cnt>90(ccr值)時,輸出高電平,此時高電平有效,故開始點亮led。也就是說,只在0到90之間,led滅,在90到900,led亮,有效電平的脈衝寬度就為:(900-90)/900=90%,那麼在高頻率的閃爍中led的亮度就為90% .

2️⃣pwm輸出模式不只有上面的這種,可以很靈活

這時候如果設定有效電平為高電平,那麼輸出的就是高電平;設定的電平是低電平,那麼輸出的就是低電平。

3️⃣幾個小細節

我在使用多個定時器時,其初始化函式都是複製貼上,但就犯了幾個錯誤,找了幾天?

(1)tim_setcomparex(tim_typedef* timx, uint16_t compare3)中的x是表示通道x,如果用的是通道3,那麼就要寫成tim_setcompare3.

(2)tim_ocxinit(tim2, &tim_ocinitstructure);

tim_ocxpreloadconfig(tim2, tim_ocpreload_enable);

這兩處也是,如果用的是通道3,那麼就要寫成tim_oc3init(tim2, &tim_ocinitstructure); 以及tim_oc3preloadconfig(tim2, tim_ocpreload_enable);.

四、調光效果

從左往右亮度分別為20%,40%,60%,80%,90%。

五、附錄

程式1、stm32定時器簡單輸出5路pwm,控制5個小燈呈現5種亮度

定時器 STM32定時器 基本定時器1

我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...

STM32高階定時器(1)

高階定時器主要學習它的輸入捕獲和輸出比較的功能 1 高階定時器與基本定時器的區別 在基本定時器的基礎上增加了 外部引腳 可以實現輸入捕獲和輸出比較 可程式設計死區互補輸出 重複計數器 帶剎車斷路 2 高階定時器的功能框圖 由功能框圖可以看出,高階定時器部分可以分為 時鐘源,控制器,時基單元,輸入捕獲...

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...