微控制器輸出pwm波在專案中是恨常用的乙個功能,今天就總結一下用stm32f103c8t6微控制器輸出16路 pwm波。
使用keil5軟體,用標準庫函式來實現。
首先看定時器初始化
void tim1_pwm_init(u16 arr, u16 psc)
初始化定時1的4個通道,對應io口為 pa8,pa9,pa10,pa11,將這4個口都設定為pwm輸出口。入口引數arr用來設定定時器的自動重裝載值,psc用於設定時鐘分頻係數。時鐘預設為72mhz。
下來初始化定時器2
void tim2_pwm_init(u16 arr, u16 psc)
這裡要注意的是,定時器1是高階定時器,定時器2、3、4是通用定時器。只有高階定時器有重複計數暫存器,而通過定時器沒有重複計數暫存器。定時器2初始化時,比定時器1少一行**,這裡要注意一下。
tim_timebaseinitstructure.tim_repetitioncounter = 0x00;
重複計數暫存器主要作用如下:
其餘設定方法和定時器1基本一樣,定時器2的4個通道對應的io口為pa0,pa1,pa2,pa3.將這四個口設定為pwm輸出模式。
入口引數arr用來設定定時器的自動重裝載值,psc用於設定時鐘分頻係數。時鐘預設為72mhz。
下來設定定時器3
void tim3_pwm_init(u16 arr, u16 psc)
設定方法和定時器2一樣,定時器3的4個通道對應的io口為pa6,pa7,pb0,pb1。將這四個口設定為pwm輸出模式。
入口引數arr用來設定定時器的自動重裝載值,psc用於設定時鐘分頻係數。時鐘預設為72mhz。
最後設定定時器4
void tim4_pwm_init(u16 arr, u16 psc)
設定方法和定時器2一樣,定時器4的4個通道對應的io口為pb6,pb7,pb8,pb9。將這四個口設定為pwm輸出模式。
入口引數arr用來設定定時器的自動重裝載值,psc用於設定時鐘分頻係數。時鐘預設為72mhz。
這樣總共16路的pwm初始化就完成了,下來看主函式設定
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "pwm.h"
int main(void)
}
初始化時設定4個定時器的頻率為8k,在while迴圈中調節占空比從0---100%變化。程式編譯後燒寫到微控制器中,通過示波器就能觀察到pwm波形變化了。
這裡先用軟體**看一下效果
STM32F103微控制器RTC結合time h使用
在使用stm32f103系列微控制器的時候總是會碰到rtc計時的問題,103系列微控制器的rtc使用的是秒計時 在經過一段時間的研究,終於發現了一種比較簡單而且易於理解的使用方法,就是結合系統檔案time.h的使用 首先要新增標頭檔案 include rtc的初始化和普通方式無區別 u8 rtc i...
解決STM32F103微控制器PB4無法拉低的問題
最近使用stm32f103的微控制器,pb4接了乙個led燈,低電平點亮,發現程式沒有辦法拉低pb4。而同樣電路的pb5 就能輸出低電平。通過檢視資料手冊,發現pb4預設是jtag引腳,並置於上拉模式,所以沒法直接當做普通的io口拉低。rcc apb2periphclockcmd rcc apb2p...
stm32f103外部中斷
void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...