【STM32】通用定時器基本原理

STM32 通用定時器基本原理(基于 STM32F1)

參考資料:STM32F1xx官方資料:《STM32中文參考手冊V10》-第14章通用定時器

STM32 定時器分類

STM32F103 系列共有三類定時器:
在這里插入圖片描述

🔎 通用定時器(TIM2~TIM5)是我們學習和使用最多的定時器。

STM32定時器:STM32F10x系列總共最多有8個定時器:
在這里插入圖片描述

通用定時器主要特點

STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5) 定時器功能特點包括:

位于低速的APB1總線上(APB1)16位計數器(TIMx_CNT): [計數模式靈活:向上、向下、中心對齊]16 位向上、向下、向上/向下(中心對齊)計數模式,自動裝載計數器(TIMx_CNT)。可配置預分頻器(TIMx_PSC):1~65535 :16 位可編程(可以實時修改)預分頻器(TIMx_PSC),計數器時鐘頻率的分頻系數 為 1~65535 之間的任意數值。4個捕獲/比較通道(TIMx_CH1~CH4):4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:1. 輸入捕獲 2. 輸出比較3. PWM 生成(邊緣或中間對齊模式) 4. 單脈沖模式輸出 支持外部觸發(ETR、ITRx):可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。支持中斷/DMA :如下事件發生時產生中斷/DMA(6個獨立的IRQ/DMA請求生成器): ① 更新:計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發) ② 觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數) ③ 輸入捕獲 ④ 輸出比較 ⑤ 支持針對定位的增量(正交)編碼器和霍爾傳感器電路 ⑥ 觸發輸入作為外部時鐘或者按周期的電流管理

STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲) 或者 產生輸出波形 (輸出比較和 PWM) 等。
使用定時器預分頻器和 RCC 時鐘控制器預分頻器,脈沖長度和波形周期可以在幾個微秒到幾個毫秒間調整。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。

計數模式詳解

通用定時器可以向上計數、向下計數、向上向下雙向計數模式。

① 向上計數模式:計數器從0計數到自動加載值(TIMx_ARR),然后重新從0開始計數并且產生一個計數器溢出事件。
② 向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然后從自動裝入的值重新開始,并產生一個計數器向下溢出事件。
③ 中央對齊模式(向上/向下計數):計數器從0開始計數到自動裝入的值-1,產生一個計數器溢出事件,然后向下計數到1并且產生一個計數器溢出事件;然后再從0開始重新計數。

在這里插入圖片描述
在這里插入圖片描述

模式描述
向上計數模式CNT 從 0 計到 ARR,溢出后回到 0,觸發更新事件
向下計數模式CNT 從 ARR 計到 0,再跳回 ARR
中心對齊模式CNT ↑ 到 ARR,再 ↓ 到 0,形成對稱三角波計數

更新事件(UEV)在溢出/下溢時觸發,可以用于控制中斷、PWM更新等等。

通用定時器工作過程:

在這里插入圖片描述

通用定時器結構圖:
在這里插入圖片描述

各個寄存器功能匯總

定時器結構主要包括以上幾個模塊:

1. 時基單元(定時器核心)計數器(CNT)預分頻器(PSC)自動重裝載寄存器(ARR)更新事件(UEV)
用于產生周期性事件(如中斷、PWM更新等)2. 輸入捕獲單元(IC)檢測外部引腳電平變化(上升/下降沿)記錄 CNT 值,實現精確計時3. 輸出比較單元(OC)當 CNT = CCRx 時,產生比較事件可輸出特定脈沖、PWM、高低電平等4. PWM輸出單元通過改變 ARR(周期)和 CCRx(占空比)實現 PWM 波形輸出核心寄存器有:
TIMx_CNT		當前計數值
TIMx_PSC		預分頻值(決定定時器時鐘頻率)
TIMx_ARR		自動重裝載值(決定計數上限)
TIMx_CCRx		捕獲/比較寄存器,用于輸入捕獲或 PWM 輸出占空比
TIMx_CR1		控制寄存器,配置使能、計數模式等
TIMx_DIER		中斷使能寄存器
TIMx_SR			狀態寄存器,標志中斷源

通用定時器工作過程:
1?? 時鐘源選定
定時器時鐘 = 外設總線時鐘(APB1) × 倍頻因子(如2)
例如:APB1 = 36MHz,TIM2~5 定時器頻率為 72MHz
2?? 預分頻器(TIMx_PSC)
將定時器時鐘進一步分頻,比如設置為 7199,就變成了 10kHz
3?? 自動重裝載(TIMx_ARR)
決定了 CNT 的最大值。例如 ARR = 999,計數從 0~999,共 1000 次
4?? 更新事件(UEV)
每次 CNT 溢出都會觸發更新事件,可用于中斷、PWM刷新等

計數時鐘的選擇:

在這里插入圖片描述

時基單元:

在這里插入圖片描述

更新事件:

在這里插入圖片描述

捕捉比較陣列:

在這里插入圖片描述
在這里插入圖片描述

PWM模式:

在這里插入圖片描述

不同功能模塊分別適用的場景:

場景功能模塊說明
周期中斷時基單元通過 CNT+ARR+PSC 實現 1ms、1s 等周期事件
PWM 輸出輸出比較控制電機、LED 亮度等
輸入捕獲捕獲比較測量波形周期、頻率、脈寬
單脈沖輸出輸出比較產生一次性脈沖(如超聲測距)

STM32 通用定時器(TIM2~TIM5)是功能最強大、應用最廣泛的定時器模塊之一,支持定時、PWM、捕獲、比較等多種功能,是嵌入式開發中不可或缺的核心外設。其中,STM32 定時器支持多達 8 種計數時鐘來源,通過靈活配置選擇器、觸發器、濾波器等模塊,能夠實現豐富的定時、計數、同步、捕獲等復雜功能;配置 STM32 的 TIM2 定時器 進入 輸入捕獲模式, 用于 測量脈沖寬度(高電平時間、低電平時間或整個周期);而時基單元是定時器的“心跳引擎”,通過 PSC、ARR 和 CNT 控制定時器的計數行為與中斷頻率,是實現周期性任務的基礎;STM32 的更新事件(UEV)是控制定時器影子寄存器同步、觸發中斷、啟動 DMA 和外設同步的核心機制,支持自動、軟件、從模式等多種觸發方式,并可通過 URS 精細控制;STM32 通用定時器的捕捉比較陣列(Capture/Compare Array,簡稱 CC 陣列) :捕捉比較陣列是定時器功能的核心模塊,支持靈活配置為輸入捕獲或輸出比較,通過濾波器、分頻器、比較器等子模塊實現精準的信號測量與控制輸出;最后,STM32 的 PWM 模式通過定時器的輸出比較功能實現,ARR 控制周期,CCRx 控制占空比,通過邊沿/中心對齊實現不同波形特性,是控制電機、LED、蜂鳴器的核心技術。

以上,歡迎有從事同行業的電子信息工程、互聯網通信、嵌入式開發的朋友共同探討與提問,我可以提供實戰演示或模板庫。希望內容能夠對你產生幫助!

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

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

相關文章

【Go語言-Day 14】深入解析 map:創建、增刪改查與“鍵是否存在”的奧秘

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

Vue腳手架搭建項目+基礎知識

1. 使用腳手架創建項目1.1 準備工作winR,在彈出的數據框中輸入cmd,數據命令查看node以及npm版本 下載vue cli1.2 創建項目1.2.1 創建一個英文目錄文件夾,cmd打開命令命令提示符1.2.2 vue ui命令打開控制臺1.2.3 創建項目創建成功1.3 項目結構…

微信小程序下單頁—地址列表頁—新增地址頁 頁面交互

新增地址流程: 下單頁 → 地址列表頁 (1次跳轉)地址列表頁 → 新增地址頁 (1次跳轉)保存地址 → 返回地址列表頁 (1次返回,自動刷新列表) 選擇地址流程: 地址列表頁 → 選中地址 → 返回下單頁 (1次返回) 更換地址: 下單頁 → 地址…

JVM與JMM

為了更清晰地對比JVM和JMM,我們可以采用表格形式,從定義、功能、結構、與多線程關系等方面進行詳細比較: 對比項JVM(Java Virtual Machine)JMM(Java Memory Model)定義一種虛構的計算機&#x…

【Docker基礎】Docker數據卷管理:docker volume rm及其參數詳解

目錄 1 引言:Docker Volume 的生命周期管理 2 docker volume rm命令基礎 2.1 命令作用 2.2 命令語法 3 參數深度解析 3.1 基礎參數表 3.2 高級參數詳解 3.2.1 --force(-f) 4 Volume刪除前置條件 4.1 可刪除狀態判斷 4.2 常見報錯處…

嵌入式系統內核鏡像相關(十)

文章目錄 前言一、點亮多個led燈的基礎實驗以及其中的問題1.1 基礎流程1.1.1 alinx教程的問題1.1.1.1 驅動程序中的亮/滅邏輯修改!1.1.1.1.1 邏輯錯誤的修改1.1.1.1.2 多燈亮/滅 1.1.1.2 驅動程序中引腳的問題以及與裸機開發的區別(重要)1.1.…

Word和Excel批量轉PDF新方法,操作簡單

PDF是一種跨平臺的文檔格式,無論在任何設備上查看,其排版、字體和圖像都不會發生變化。這確保了文檔的一致性,避免了由于不同軟件版本或操作系統引起的顯示問題。這款小巧的工具大小不到2MB,使用起來異常簡單。只需要把需要轉換的…

AI搜索 MCP最佳實踐

背景 那些 LLM 不知道的事 嘗試直接詢問LLM“今天天氣如何”時,會發現LLM無法回答——它既不知道“今天”是哪天,也無法獲取地理位置信息。這揭示了LLM的局限:缺乏與外部工具和實時數據的交互能力。 為解決這一問題,MCP&#x…

JVM 簡介與作用

🚀 JVM 簡介與作用 📚 深入理解 Java 虛擬機的核心概念與重要作用 📖 目錄 🤔 什么是 Java 虛擬機(JVM)🌐 JVM 在 Java 生態中的核心地位🔀 JVM 跨平臺原理剖析📝 總結 …

? OpenAudio S1:影視級文本轉語音與語音克隆Mac整合包

? OpenAudio S1:影視級文本轉語音與語音克隆Mac整合包 🚀 OpenAudio S1 簡介 OpenAudio S1 是由 Fish Audio 開發的 Fish Speech 系列的最新一代人工智能語音生成模型。該模型旨在大幅提升 AI 語音生成的技術水平,為用戶提供更加自然、富有表…

spring加載外部properties文件屬性時,讀取到userName變量值和properties文件的值不一致

問題 使用spring DI注入外部properties文件屬性時&#xff0c;讀取到userName變量值和properties文件的值不一致。 bean屬性注入&#xff1a; <!--加載配置文件--> <context:property-placeholder location"classpath:*.properties"/><bean id"…

黑馬點評系列問題之基礎篇p7 06初識redis無法在虛擬機查到圖形化界面存進去的鍵

問題描述 在RESP中輸入了一些鍵(name,age等這些) 但是在圖形化界面里面輸入的&#xff0c;在非圖形化界面就找不到&#xff0c;在非圖形化界面里輸入的&#xff0c;在圖形化界面里就可以查到。 原因分析及解決 經過多次實驗&#xff0c;發現是因為在添加鍵名的時候&#xff0…

在VMware虛擬機中安裝Windows 98時,Explorer提示“該程序執行了非法操作,即將關閉”的解決辦法

在使用iso文件&#xff08;MD5: 0E496B5DCC519F550AAF0BCFBB4A11EA&#xff09;安裝Windows98時&#xff0c;遇到此提示。 雖然原因未知&#xff0c;也無需深入探究&#xff0c;但是根據網友在 https://www.bilibili.com/opus/435866522585702782 中給出的相似經驗&#xff…

在瀏覽器中使用SQLite(官方sqlite3.wasm)

有人可能會問&#xff1a;既然瀏覽器里又內置得IndexedDB&#xff0c;而且在IndexedDB里存數據&#xff0c;關了瀏覽器數據也不會丟&#xff0c;為什么還要在瀏覽器里用SQLite? 實際上&#xff0c;當 IndexedDB 內的數據量增多&#xff0c;數據和數據之間的關系變得復雜&…

數據結構(Java)--位運算

前言 本文為本小白學習數據結構的筆記&#xff0c;將以算法題為導向&#xff0c;向大家更清晰的介紹數據結構相關知識&#xff08;算法題都出自B站馬士兵教育——左老師的課程&#xff0c;講的很好&#xff0c;對于想入門刷題的人很有幫助&#xff09; 為什么要使用為位運算 位…

秋招Day14 - Redis - 應用

Redis如何實現異步消息隊列&#xff1f; List配合LPUSH和RPOP。 另外就是用 Redis 的 Pub/Sub 來實現簡單的消息廣播和訂閱。 但是這兩種方式都是不可靠的&#xff0c;因為沒有 ACK 機制所以不能保證訂閱者一定能收到消息&#xff0c;也不支持消息持久化。 Redis如何實現延時…

因果語言模型、自回歸語言模型、僅解碼器語言模型都是同一類模型

因果語言模型、自回歸語言模型、僅解碼器語言模型都是同一類模型 flyfish 因果語言模型&#xff08;causal Language Models&#xff09; 自回歸語言模型&#xff08;autoregressive language models&#xff09; 僅解碼器語言模型&#xff08;decoder-only language models&am…

jvm架構原理剖析篇

簡單題&#xff08;5道&#xff09; 考查內容&#xff1a;JVM運行時數據區域 題干&#xff1a;Java虛擬機棧的主要作用是&#xff1f; A. 存儲對象實例 B. 存儲方法調用和局部變量 C. 存儲靜態字段 D. 存儲字節碼指令 正確答案&#xff1a;B 解析&#xff1a;虛擬機棧用于存儲方…

智鏈萬物:人工智能驅動的產業智能化革命

當生成式AI在藝術與創意領域掀起風暴&#xff0c;大型語言模型重塑信息交互方式時&#xff0c;一場更為基礎、影響更為深遠的變革&#xff0c;正在全球實體經濟的根基處悄然發生并加速推進——這就是產業智能化。它并非簡單的“機器換人”&#xff0c;而是人工智能&#xff08;…

python中上下文管理器 與 try finally有什么區別

目錄 主要區別代碼對比何時使用哪種方式 主要區別 語法簡潔性 上下文管理器使用 with 語句&#xff0c;語法更簡潔優雅try-finally 需要顯式編寫異常處理代碼&#xff0c;更冗長 代碼復用性 上下文管理器可以封裝為類或函數&#xff0c;便于在多處復用try-finally 通常需要在每…