STM32F103微控制器生成16路PWM波

2021-10-06 18:56:48 字數 1546 閱讀 5294

微控制器輸出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...