【STM32】定時器輸入捕獲

STM32 定時器輸入捕獲功能筆記

一、什么是輸入捕獲(Input Capture)

輸入捕獲是利用定時器的輸入通道,在檢測到信號電平變化(如上升沿或下降沿)時,立即將當前計數器的值捕獲并保存到捕獲寄存器(CCR)中。這一過程由硬件完成,不會受程序運行延遲影響,可用于精確測量信號的時間特性。

典型應用場景:測量脈沖寬度、頻率、信號周期等。


二、輸入捕獲的基本原理

  • STM32 的通用定時器和高級定時器都支持輸入捕獲功能。

  • 每個輸入通道(TIx)都對應一個捕獲寄存器 CCRx。

  • 捕獲過程:
    TIx → 濾波器 → 邊沿檢測 → 捕獲事件 → CCRx記錄當前CNT值

當配置為上升沿捕獲時:
→ 信號從低跳高時,CCRx 記錄當前定時器 CNT 的值。
當配置為下降沿捕獲時:
→ 信號從高跳低時,CCRx 同樣記錄 CNT 值。

📌 一個通道只能設置為上升沿或下降沿捕獲,不能同時捕獲兩個。


三、直接模式與間接模式(重點)

輸入捕獲支持 直接模式間接模式,用于靈活地測量信號寬度或周期。

模式捕獲通道檢測通道用途舉例
直接模式CCR1 記錄 TI1FP1 的邊沿用于周期或頻率測量
間接模式CCR1 記錄 TI2FP1 的邊沿用于測量高/低電平寬度(PWM輸入)

?? TI1/TI2 是一對可互相借用輸入的通道,TI3/TI4 亦同理。
例如 CCR1 可以捕獲 TI2(間接模式)輸入的邊沿,而不是 TI1。

示例說明:
  • PWM輸入測量

    • CCR1 配置為捕獲上升沿(周期起點)

    • CCR2 配置為捕獲下降沿(占空比終點)

    • 得到的兩次捕獲值之差即可算出高電平持續時間或周期


四、通道映射說明

TI1  --> TI1FP1 → 捕獲寄存器1(CCR1)
TI2  --> TI2FP2 → 捕獲寄存器2(CCR2)
TI1  --> TI1FP2 → 捕獲寄存器2(間接模式)
TI2  --> TI2FP1 → 捕獲寄存器1(間接模式)TI3、TI4同理,支持直接與間接映射

五、CubeMX 設置步驟(以 TIM2 CH1 CH2 為例)

1.選擇定時器 TIM2

2.選擇 Channel 1 → Input Capture Direct Mode(上升沿)

3.選擇 Channel 2 → Input Capture Indirect Mode(下降沿)

4.設置輸入極性(上升沿/下降沿)

5.設置采樣頻率與濾波器(一般默認即可)

6.勾選 TIM2 global interrupt

7.生成代碼并編輯中斷回調函數


六、HAL庫相關函數與代碼示例

1. 啟動捕獲:

HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1); // 啟動通道1輸入捕獲(中斷方式)
HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2); // 啟動通道2輸入捕獲

2. 中斷回調處理:

uint32_t capture1 = 0, capture2 = 0, pulse_width = 0;void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){capture1 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // 上升沿時間}else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2){capture2 = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // 下降沿時間if(capture2 > capture1)pulse_width = capture2 - capture1;elsepulse_width = (0xFFFF - capture1 + capture2); // 溢出處理}
}
1;elsepulse_width = (0xFFFF - capture1 + capture2); // 溢出處理}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79159.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt通過QXlsx庫文件寫入到excl文件,讀取excl文件

第一:下載QXlsx庫文件 https://download.csdn.net/download/qq_32663053/90739425 第二:在Qt項目中引入QXlsx庫,需要把QXlsx庫文件放在項目文件夾下 第三:將tableview中的數據存入到excl文件 代碼: void MainWindow…

【KWDB 創作者計劃】一款面向 AIoT 的多模數據庫實戰體驗

一、KWDB:AIoT 時代的數據庫新選擇 KWDB 是由開放原子開源基金會孵化的分布式多模數據庫,專為物聯網、工業互聯網等場景設計。其核心價值在于時序與關系數據融合處理能力: ?多模統一引擎?:單個實例可同時建立時序庫&#xff08…

【教學類-102-22】蝴蝶彩色1——通義萬相“彩色蝴蝶”透明切邊基礎圖片制作(五款板式、批量下載、修圖、透明、切邊)

一、下載圖片 關鍵詞:卡通簡筆畫,白色背景,黑白輪廓線,、鮮艷,彩色,一只蝴蝶,簡單,可愛,矢量圖,大。 簡筆畫 強度1 4:3(長方形適配A4紙) 五…

【JAVA】方法定義與重載:JVM方法調用機制(8)

核心知識點詳細解釋 Java方法的定義和使用 在Java中,方法是一段具有特定功能的代碼塊,它可以接受參數并返回一個值。方法的定義包括方法的修飾符、返回類型、方法名、參數列表和方法體。其基本語法如下: 修飾符 返回類型 方法名(參數列表)…

基于STM32的帶恒溫系統智能外賣柜設計

標題:基于STM32的帶恒溫系統智能外賣柜設計 內容:1.摘要 隨著外賣行業的迅速發展,對外賣存放設備的智能化和功能性要求日益提高。本設計的目的是開發一種基于STM32的帶恒溫系統智能外賣柜。方法上,以STM32微控制器為核心,結合溫度傳感器、加…

【綜述】相位解包裹算法對比分析

引言 相位解包裹是基于干涉的位相測量技術中的重要環節,如合成孔徑雷達干涉、光學干涉測量技術、醫學成像技術、數字全息三維成像、相干衍射成像等技術中都涉及位相解包裹。位相解包裹也稱為位相展開、位相解截斷、位相解纏繞等。與之相反的過程謂之包裹位相、截斷…

Rust 學習筆記:關于枚舉與模式匹配的練習題

Rust 學習筆記:關于枚舉與模式匹配的練習題 Rust 學習筆記:關于枚舉與模式匹配的練習題以下程序能否通過編譯?若能,輸出是什么?考慮這兩種表示結果類型的方式,若計算成功,則包含值 T&#xff1b…

C++負載均衡遠程調用學習之QPS性能測試

目錄 1.昨日回顧 2.QPS_TEST_PROTOBUF協議的集成 3.QPS_TEST_SERVER端實現 4.QPS_TEST_QPS簡單介紹 5.QPS_TEST_QPS客戶端工具編寫和性能測試 1.昨日回顧 2.QPS_TEST_PROTOBUF協議的集成 ## 14) Reactor框架QPS性能測試 ? 接下來我們寫一個測試用例來測一下我們…

【MySQL數據庫】視圖

1,視圖的基本介紹 視圖是一個虛擬表,其內容由查詢定義。與真實表一樣的是,視圖包含帶有名稱的列和行數據;與真實表不一樣的是,視圖本身并不在數據庫中存儲數據。視圖的數據變化會影響到基表,基表的數據變化…

Linux系統安裝方式+適合初學者的發行版本

Linux系統安裝方式適合初學者發行版—目錄 一、Linux系統的安裝方式1. 物理機直接安裝2. 虛擬機安裝3. 雙系統安裝4. Live USB試用5. 云服務器安裝 二、適合初學者的Linux發行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、選擇建議場…

Linux C++ JNI封裝、打包成jar包供Java調用詳細介紹

在前面 Android專欄 中詳細介紹了如何在Android Studio中調用通過jni封裝的c庫。 在Android使用 opencv c代碼,需要準備opencv4android,也就是c的任何代碼,是使用Android NDK編譯的,相當于在windows/mac上使用Android stdido交叉…

4.1 模塊概述

1.Python結構 工程 > 包 > 模塊 Python工程: “Python項目中最大的文件夾(本質就是一個文件夾)” --- 左側的 CODE文件夾 為Python工程 Python包: 本質就是一個文件夾,但是python包中具備具體的標識,如果沒有標識則不能導入 --- 左側的 01.Python基礎 文件夾為python包 P…

AJAX 實例

AJAX 實例 引言 Ajax(Asynchronous JavaScript and XML)是一種在無需重新加載整個頁面的情況下,與服務器交換數據并更新部分網頁的技術。Ajax通過在后臺與服務器交換數據,實現了頁面的動態更新,從而提高了用戶體驗和…

相機的基礎架構

📷 相機相關基礎架構學習路徑 一、了解手機相機系統架構 Android Camera HAL(如果你是做 Android 平臺) 學習 Camera HAL3 架構(基于 camera_device_t, camera3_device_ops 接口) 熟悉 CameraService → CameraProvid…

MLX Chat - 基于 Streamlit 的 MLX 前端界面

本文翻譯整理自:https://github.com/da-z/mlx-ui 一、關于 MLX Chat 一個基于 Streamlit 的簡單 UI/網頁前端,用于 MLX mlx-lm 項目。 相關鏈接資源 github : https://github.com/da-z/mlx-uiMLX 社區模型庫:https://huggingface.co/mlx-co…

el-table 自定義列、自定義數據

一、對象數組格式自定義拆分為N列 1-1、數據格式: const arrayList ref([{"RACK_NO": "A-1-001"},{"RACK_NO": "A-1-002"},{ "RACK_NO": "A-1-003"},//省略多個{"RACK_NO": "A-1-100…

JVM 如何使用性能分析工具定位代碼中的性能問題?

核心思想: 通過工具觀察程序在特定負載下的運行狀態,識別消耗資源最多的代碼段(熱點代碼)、異常的內存分配模式或線程阻塞情況,然后針對性的優化代碼。 通用步驟: 確定問題: 首先明確遇到了什…

Python虛假新聞檢測識別

程序示例精選 Python虛假新聞檢測識別 如需安裝運行環境或遠程調試,見文章底部個人QQ名片,由專業技術人員遠程協助! 前言 這篇博客針對《Python虛假新聞檢測識別》編寫代碼,代碼整潔,規則,易讀。 學習與應…

網絡原理 - 12(HTTP/HTTPS - 3 - 響應)

目錄 認識“狀態碼”(status code) 200 OK 404 Not Found 403 Forbidden 405 Method Not Allowed 500 Internal Server Error 504 Gateway Timeout 302 Move temporarily 301 Moved Permanently 418 I am a teaport 狀態碼小結: …

Spring Boot中集成Guava Cache或者Caffeine

一、在Spring Boot(1.x版本)中集成Guava Cache 注意&#xff1a; Spring Boot 2.x用戶&#xff1a;優先使用Caffeine&#xff0c;性能更優且維護活躍。 1. 添加依賴 在pom.xml中添加Guava依賴&#xff1a; <dependency><groupId>com.google.guava</groupId&…