STM32 PWM輸出相關配置介紹

2021-08-19 04:17:02 字數 2880 閱讀 3530

2018/4/21

stm32

1.pwm(脈衝寬度調製):通過數字輸出對模擬量進行控制

2.tim_x:定時器,在stm32中存在8個

3.tim_oc:實現輸出比較功能

4.pwmval:占空比

2.具體配置流程

1,介紹:作為pwm除了基本定時器沒有通道,通用暫存器有4道,高階暫存器有7道

2.步驟

//高階定時器的pwm輸出功能

//實現pwm輸出步驟

//1.使能定時器3和相關io口時鐘

//2.初始化io口為復用輸出

//3.重對映pb5

//4.實現初始化定時器arr psc

//5.初始化比較引數

//6.使能預裝載定時器

//7.使能定時器

//8.改變ccrx實現占空比的效果

3.具體實現

1.相關結構體的配置和時鐘使能(準備工作)

//結構體初始化

gpio_inittypedef gpio_initstructure;

tim_timebaseinittypedef tim_timebaseinitstructure;//設定定時器的初始化

tim_ocinittypedef tim_ocinitstructure;//實現對輸出比較功能的配置

//配置gpio口

rcc_apb2periphclockcmd(rcc_apb2periph_tim1,enable);//使能tim1

rcc_apb2periphclockcmd(rcc_apb2periph_gpiob| rcc_apb2periph_afio,enable);//使能gpiob和afio的復用時鐘

2.初始化gpio

gpio_initstructure.gpio_pin = gpio_pin_8;				 //led0-->pa.8 埠配置

gpio_initstructure.gpio_mode = gpio_mode_af_pp; //設定復用推挽 輸出 /

gpio_initstructure.gpio_speed = gpio_speed_50mhz; //io口速度為50mhz

gpio_init(gpioa, &gpio_initstructure);

3.配置定時器1(高階定時器)

tim_timebaseinitstructure.tim_period=arr;//自動過載暫存器週期

tim_timebaseinitstructure.tim_prescaler=psc;//時鐘頻率的預分頻係數

tim_timebaseinitstructure.tim_clockdivision=0;//設定時鐘分割,濾波器的頻率和定時器的頻率是一樣的

//這2位定義在定時器時鐘(ck_int)頻率、死區時間和由死區發生器與數字濾波器(etr,tix)所用

tim_timebaseinitstructure.tim_countermode=tim_countermode_up;//向上計數模式

tim_timebaseinit(tim1, &tim_timebaseinitstructure);//進行定時器3的初始化

//tim_itconfig(tim1,tim_it_update,enable); //允許更新中斷

4.配置比較功能(timx_oc)

//配置pwm通道

tim_ocinitstructure.tim_ocmode=tim_ocmode_pwm2;

//設定為模式2,模式2代表著如果所在值(timx_cnt)小於捕獲值(tim_xccr)有效(高低電平可調)

//設定為模式1,模式1代表著如果所在值(timx_cnt)大於捕獲值(tim_xccr)有效(高低電平可調)

tim_ocinitstructure.tim_outputstate=tim_outputstate_enable;//比較輸出使能

tim_ocinitstructure.tim_ocpolarity=tim_ocpolarity_high;//輸出極性高

tim_oc1init(tim1, &tim_ocinitstructure);

//使能高階暫存器的剎車和死區暫存器

tim_ctrlpwmoutputs(tim1,enable); //⑤moe 主輸出使能

tim_oc1preloadconfig(tim1, tim_ocpreload_enable); //ch1 預裝載使能

tim_arrpreloadconfig(tim1, enable); //使能 timx 在 arr 上的預裝載暫存器

tim_cmd(tim1,enable);//使能tim1

}

5.主函式(這裡是為了實現呼吸燈)

#include"sys.h"

#include"delay.h"

#include"led.h"

#include"time.h"

int main()

else

if(led0pwmval>300)

dir=0;

if(led0pwmval==0)

dir=1;

tim_setcompare1(tim1,led0pwmval);//修改占空比 }

}

注:tim_setcompare1(tim1,led0pwmval)的介紹

1.實現在占空比周圍實現電平的轉變,從而實現呼吸燈的亮滅變化

STM32 PWM輸出設定

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

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,...