如何把定時器設定成pwm模式,從而產生相應頻率,相應占空比的pwm波
藍橋杯主要考的定時器也就三個
tim1
,tim2
,tim3
tim3
如何配置
pwm波
對應通道一,
pa7對應通道
2
#ifndef __pwm_h
#define __pwm_h
#include "stm32f10x.h"
void tim3_pwm_init(u16 pwm_fre,u8 ch1_duty,u8 ch2_duty);
#endif
#include "pwm.h"
void tim3_pwm_init(u16 pwm_fre,u8 ch1_duty,u8 ch2_duty)
stm32f1的主頻是72mhz,那麼在我們不分頻的情況下,tim3的主頻也是72m,那麼72m的計數速度我們覺得太快了,同時也不方面我們進行計算,所以讓tim3的時鐘進行72分頻,那麼分頻係數就是72 - 1。分頻後我們的定時器將以1m的速度進行計數,那麼這個計數值是非常方面計算的。能換算一下,1mhz的計數頻率,我們換算成週期那麼就是1us,也就是說我們的計數值是每過1us加一。我們在初始化函式裡傳入乙個入口引數代表我們設定的頻率值(單位是hz),我們把頻率值換算成計數值,也就是1000000/pwm_fretim_pulse則代表的是你的電平翻轉值我們畫乙個簡圖,假設我們的計數值為2000,pulse為1000
當我們的計數值到2000後就會清零不斷的進行向上計數,假如當前計數值小於pulse,那麼輸出的為高電平,假如當前技術值大於pulse,那麼輸出就為低電平,這樣的能夠實現50%占空比的pwm波了。
就簡單的來說,pulse就是用來設定你的占空比的,我們只需要把pulse設定成 計數值x 占空比就可以了
我們先把頻率設定成1000hz,pa6產生40%占空比的方波,pa7產生80%占空比的方波
那麼再來設定成5000hz,pa6產生10%占空比的方波,pa7產生30%占空比的方波
#include "stm32f10x.h"
#include "lcd.h"
#include "pwm.h"
u32 timingdelay = 0;
void delay_ms(u32 ntime);
//main body
int main(void)}//
void delay_ms(u32 ntime)
使用pwm模式有乙個缺點:同一定時器中,不同的通道下,輸出的頻率固定,占空比可變。也就是說,假如我們通道1輸出1khz方波,那麼通道同樣也是1khz 方波。這種pwm模式在對於我們日常的控制使用上是沒有問題的,但是你看藍橋杯歷年賽題的時候,會看到許多題目要你使用乙個定時器,不同通道上讓你產生不同頻率,不同占空比的方波,甚至還有題目讓你產生相位不同的方波,那麼在這種情況下顯然pwm模式時達不到這種效果的,我們就要換一種方式stm32韌體庫v3.5\stm32f10x_stdperiph_lib_v3.5.0\project\stm32f10x_stdperiph_examples\tim\pwm_output 藍橋杯嵌入式 USART
乙個是串列埠 1 pa9,pa10 乙個是串列埠 2 pa2,pa3 我們的藍橋杯嵌入式開發板並不能直接使用串列埠 1rxbuf 是用來儲存串列埠的接收資料的,rxover 為接收串列埠結束標誌位,rxcunt 為串列埠接收計數值 ifndef usart h define usart h incl...
藍橋杯嵌入式 LCD
include stm32f10x.h include lcd.h include stdio.h u8 string 20 u8 temp 30 float ao 3.81 u32 timingdelay 0 void delay ms u32 ntime main body int main v...
藍橋杯嵌入式 RTC
bkp裡是關於備份暫存器的庫函式,pwr裡是關於電源管理的庫函式 ifndef rtc h define rtc h include stm32f10x.h void rtc init u8 hh,u8 mm,u8 ss endif include rtc.h void rtc init u8 hh...