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