學習筆記 STM32定時器程式應用(一)

2021-09-27 07:41:11 字數 2729 閱讀 2678

pwm互補輸出帶死區時間和剎車控制**講解

時隔11天,我又回來了

之間寫了stm32的三種定時器的一些基本概念,今天我來講解一下相關的程式應用。

我們直接從野火的韌體庫例程中拷貝乙個串列埠的例程:usart接髮。

由於我們這個例程是關於互補輸出,因此需要兩個gpio;死區時間用軟體配置,而剎車控制也需要使用乙個gpio。所以我們在正通道中選擇pa8,在互補通道中選擇pb13,剎車控制選用pb12。

首先,在目標檔案下的user資料夾下新建advancetim資料夾,在其目錄下建立bsp_advancetim.c和bsp_advancetim…h兩個檔案。

然後先在.**件中新增條件編譯語句:

#ifndef __bsp_advancetime_h

#define __bsp_advancetime_h

#include

"stm32f10x.h"

#endif

/* __bsp_advancetime_h */

在編寫主體程式時,我們先來看看其原理:

我們先假設占空比為50%,需要配置cnt,ccr,arr,當cnt從0向上計數時,初始設的有效電平為高電平,當cnt我們在剛剛建立的.c檔案中配置gpio為復用輸出模式:

static

void

advance_tim_gpio_config

(void

)

然後,由於我們使用的是tim1的三個引腳,因此我們需要在一開始新建的.**件中寫巨集定義:

//當使用不同的定時器的時候,對應的gpio是不一樣的,這裡我們使用的是tim1

#define advance_tim tim1

#define advance_tim_apbxclock_fun rcc_apb2periphclockcmd

#define advance_tim_clk rcc_apb2periph_tim1

//pwm訊號的頻率 f=tim_clk/

#define advance_tim_period (8-1)

#define advance_tim_psc (9-1)

#define advance_tim_pulse 4

#define advance_tim_irq tim1_up_irqn

#define advance_tim_irqhandler tim1_up_irqhandler

//tim1輸出比較通道

#define advance_tim_ch1_gpio_clk rcc_apb2periph_gpioa

#define advance_tim_ch1_port gpioa

#define advance_tim_ch1_pin gpio_pin_8

//tim1輸出比較通道的互補通道

#define advance_tim_ch1n_gpio_clk rcc_apb2periph_gpiob

#define advance_tim_ch1n_port gpiob

#define advance_tim_ch1n_pin gpio_pin_13

//tim1輸出比較通道的剎車通道

#define advance_tim_bkin_gpio_clk rcc_apb2periph_gpiob

#define advance_tim_bkin_port gpiob

#define advance_tim_bkin_pin gpio_pin_12

緊接著,我們在.c函式中初始化我們需要用到的結構體:

static

void

advance_tim_mode_config

(void

)

然後,在我們初始化完結構體之後,我們還需要對高階定時器寫乙個初始化函式:

void

advance_tim_init

(void

)

最後,我們還需要乙個主函式:

#include

"stm32f10x.h"

#include

"bsp_usart.h"

#include

"bsp_advancetim.h"

intmain

(void

)}

在開發板上測試程式的時候,使用示波器,乙個連pa8,乙個連pb12,乙個連pb13,乙個連gnd。在**波形是,pa8的波形從1到0,而pb13的波形應從0到1,但是沒有立即變化,這是為了讓mos管完全導通,當互補通道從1變0時,pa8並沒有立即開啟,同樣也是為了讓pb13驅動的mos管完全關閉。

stm32關定時器 STM32定時器TIM3程式

include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...

STM32學習筆記 SysTick定時器

q 什麼是systick定時器?systick 是乙個24 位的倒計數定時器,當計到0 時,將從reload 暫存器中自動重裝載定時初值。只要不把它在systick 控制及狀態暫存器中的使能位清除,就永不停息。q 為什麼要設定systick定時器?1 產生作業系統的時鐘節拍 systick 定時器被...

STM32 定時器中斷學習筆記

在stm32中,定時器相關的庫函式主要集中在韌體庫檔案 stm32f10x tim.h 和 stm32f10x tim.c 檔案中,所以在進行定時器方面的處理時,需要載入這兩個檔案進來。在進行定時器操作時,一般按如下步驟來進行 1 開啟相關外設的時鐘。以定時器tim3為例,由stm32的時鐘樹可以看...