stm32專題二十六 輸入捕獲 脈寬測量

2021-09-27 03:22:18 字數 3187 閱讀 7461

硬體設計:

脈寬測量原理:

當按鍵沒有按下時,由硬體電路自動拉低。如果按鍵按下,則pa0產生上公升沿,我們進行脈寬測量時,首先設定為上公升沿捕獲,然後在第一次捕獲到上公升沿時,將計數器清零,並設定捕獲極性為下降沿捕獲。當第二次捕獲到訊號時,就是乙個完整的高電平時間。值得注意的是,如果定時器溢位頻率為72m(預分頻係數71)時,最大計數值為65536us,要考慮溢位(更新中斷)。

**如下,非常簡單。

bsp_generaltim.c

#include "bsp_generaltim.h"

// 定時器輸入捕獲使用者自定義變數結構體定義

tim_icuservaluetypedef tim_icuservaluestructure = ;

// 中斷優先順序配置

static void general_tim_nvic_config(void)

static void general_tim_gpio_config(void)

static void general_tim_mode_config(void)

void general_tim_init(void)

bsp_generaltim.h

#ifndef __bsp_advancetim_h

#define __bsp_advancetim_h

#include "stm32f10x.h"

/************通用定時器tim引數定義,只限tim2、3、4、5************/

// 當使用不同的定時器的時候,對應的gpio是不一樣的,這點要注意

// 我們這裡預設使用tim5

#define general_tim tim5

#define general_tim_apbxclock_fun rcc_apb1periphclockcmd

#define general_tim_clk rcc_apb1periph_tim5

#define general_tim_period 0xffff

#define general_tim_psc (72-1)

// tim 輸入捕獲通道gpio相關巨集定義

#define general_tim_ch1_gpio_clk rcc_apb2periph_gpioa

#define general_tim_ch1_port gpioa

#define general_tim_ch1_pin gpio_pin_0

#define general_tim_channel_x tim_channel_1

// 中斷相關巨集定義

#define general_tim_it_ccx tim_it_cc1

#define general_tim_irq tim5_irqn

#define general_tim_int_fun tim5_irqhandler

// 獲取捕獲暫存器值函式巨集定義

#define general_tim_getcapturex_fun tim_getcapture1

// 捕獲訊號極性函式巨集定義

#define general_tim_ocxpolarityconfig_fun tim_oc1polarityconfig

// 測量的起始邊沿

#define general_tim_strat_icpolarity tim_icpolarity_rising

// 測量的結束邊沿

#define general_tim_end_icpolarity tim_icpolarity_falling

// 定時器輸入捕獲使用者自定義變數結構體宣告

typedef struct

tim_icuservaluetypedef;

extern tim_icuservaluetypedef tim_icuservaluestructure;

/**************************函式宣告********************************/

void general_tim_init(void);

#endif /* __bsp_advancetim_h */

以上是一些結構體配置,然後比較重要的是中斷服務函式:

void general_tim_int_fun(void)

// 上公升沿捕獲中斷

if ( tim_getitstatus (general_tim, general_tim_it_ccx ) != reset)

// 下降沿捕獲中斷

else // 第二次捕獲

tim_clearitpendingbit (general_tim,general_tim_it_ccx);

} }

在主函式中進行測試:

main.c

#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_usart.h"

#include "bsp_generaltim.h"

#include void delay(uint32_t count);

int main(void)}}

測試結果為:

stm32專題二十六 互補輸出 死區剎車

互補輸出 死區剎車 這一部分 主要是初始化3個結構體,包括時基結構體 輸出比較結構體和死區配置結構體,要對照前一篇部落格和中文參考手冊中的暫存器說明來仔細看,如下 bsp advancetim.c include bsp advancetim.h static void advance tim gp...

stm32 輸入捕獲

根據定時器的計數頻率,我們就可以算出t1 t2的時間,從而得到高電平脈寬 計算公式 n arr ccrx2首先設定定時器通道為上公升沿捕獲,這樣在t1時刻,就會捕獲到當前的cnt值,然後立即清零cnt,並設定定時器通道為下降沿捕獲,這樣到t2時刻,又會發生捕獲事件,得到此時的cnt值,記為ccrx2...

stm32 輸入捕獲

stm32f1 除了基本定時器 tim6 和 tim7,其他定時器都具有輸入捕 獲功能。輸入捕獲可以對輸入的訊號的上公升沿,下降沿或者雙邊沿進行捕獲,通 常用於測量輸入訊號的脈寬 測量 pwm 輸入訊號的頻率及占空比 原理 輸入捕獲模式下,u8 tim5 ch1 capture sta 輸入捕獲狀態...