TIM定時器

一、TIM定時器

STM32高級定時器實戰:PWM、捕獲與死區控制詳解-CSDN博客

玩轉STM32_rivencode的博客-CSDN博客

二、相關函數

1.TIM_TimeBaseInitTypeDef結構體講解

typedef struct
{uint16_t TIM_Prescaler;         // 預分頻器,用于設置定時器計數頻率uint16_t TIM_CounterMode;       // 計數模式:向上、向下或中心對齊模式
// 自動重裝載寄存器值,定時周期 = (TIM_Period + 1) * (Prescaler + 1) / Timer_Clockuint16_t TIM_Period;            uint16_t TIM_ClockDivision;     // 時鐘分頻(用于濾波器),對輸入捕獲/死區時間等有影響uint8_t  TIM_RepetitionCounter; // 重復計數器(高級定時器)
} TIM_TimeBaseInitTypeDef;

2.基本、通用、高級定時器

類型舉例PWM輸入捕獲/輸出比較死區控制互補輸出重復計數器主從同步中斷/定時功能
基本定時器TIM6、TIM7??????? 支持中斷、定時
通用定時器TIM2~TIM5??????? 支持多種模式
高級定時器TIM1、TIM8??????? 功能最強大
分類功能特性常見用途
基本定時器只支持定時和中斷簡單定時中斷、DAC 觸發
通用定時器支持 PWM、輸入捕獲、輸出比較等電機控制、PWM、信號測量
高級定時器通用功能 + 死區 + 互補 + 重復計數器等高級電機控制、逆變器、功率控制

3.TIM_ClearFlag函數講解

用于 清除定時器中斷/狀態標志位。它的本質就是將 TIMx->SR 中某些標志位置 0。

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_IT);
參數說明
TIMx要操作的定時器(如 TIM2, TIM3 等)
TIM_IT要清除的中斷標志位,可以是以下值之一或它們的組合:
- TIM_IT_Update (更新中斷)
- TIM_IT_CC1 ~ TIM_IT_CC4(通道中斷)
- TIM_IT_Trigger(觸發中斷)
- TIM_IT_COM(通訊中斷)
  • 必須清除標志位,否則定時器中斷會不斷重復進入。

  • 清除標志位 應該在中斷處理函數中進行

  • 可以組合多個標志一起清除:

4.TIM_ITConfig函數講解

開啟或關閉指定的定時器中斷源(如更新中斷、捕獲比較中斷、觸發中斷等)。

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
參數名含義
TIMx要配置的定時器,例如 TIM1 ~ TIM17(取決于芯片型號)
TIM_IT中斷類型
NewStateENABLEDISABLE,表示啟用或關閉該中斷
宏定義含義
TIM_IT_Update更新中斷(即計數器溢出)
TIM_IT_CC1捕獲/比較 1 中斷
TIM_IT_CC2捕獲/比較 2 中斷
TIM_IT_CC3捕獲/比較 3 中斷
TIM_IT_CC4捕獲/比較 4 中斷
TIM_IT_Trigger觸發中斷
TIM_IT_COM通訊中斷(高級定時器)
TIM_IT_Break斷路器中斷(高級定時器)

此函數 不會 配置 NVIC,必須另外調用 NVIC_Init() 注冊中斷號;

TIM_ITConfig() 會設置 TIMx->DIER(DMA/中斷使能寄存器) 中對應中斷的使能位;

5.TIM_GetITStatus函數講解

用于 查詢某個定時器中斷是否觸發 的函數。

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
參數說明
TIMx要查詢的定時器(如 TIM1 ~ TIM17,具體取決于芯片型號)
TIM_IT要查詢的中斷源(如 TIM_IT_UpdateTIM_IT_CC1 等)

🔁 返回值:

  • SET:指定的中斷標志已經被置位,即中斷已經觸發。

  • RESET:指定的中斷標志未被置位。

TIM_GetITStatus() 會檢查定時器的以下兩個寄存器:

  1. TIMx->SR:狀態寄存器,包含中斷標志位

  2. TIMx->DIER:中斷使能寄存器,對應中斷是否使能

?? 只有當中斷標志位被置位,并且該中斷已使能時,函數才返回 SET

6.TIM_ClearITPendingBit函數講解

用于 清除定時器中斷掛起標志位(Pending Bit)

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

當某個定時器中斷發生時,標志位(比如 UIF)會在 SR 寄存器中置位,表示該中斷事件已發生。如果不清除該標志位,下一次進入中斷時,標志位仍然為1,會導致反復進入中斷,造成“死循環”現象。因此,需要在中斷服務函數中調用此函數清除中斷標志位。該函數本質上就是對 TIMx->SR 寄存器中某些位寫 0 來清除掛起標志。

void TIM3_IRQHandler(void)
{// 判斷是否為更新中斷if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  // 清除中斷標志位// 執行你的中斷處理邏輯}
}

7.TIM_ClearITPendingBit與TIM_ClearFlag有何區別

其實重點在Flag和IT,前者是外設的狀態標志,而后者是外設的中斷標志。狀態標志就是一個外設它有自身的一些標志位(Flag),來表明它處于什么狀態。中斷標志就是使能外設的中斷后,每次發生一次中斷,它會表明發生了什么樣的中斷,同樣中斷也有相應的標記。兩者分別靠函數TIM_GetFlagStatus()和函數TIM_GetITStatus()來獲取。

TIM_ClearITPendingBit一般用于 中斷服務函數中,防止中斷反復進入。

TIM_ClearFlag通常用于輪詢模式下清除標志位。

可以看出兩個函數的實現基本一致。

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

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

相關文章

Python 小練習系列 | Vol.14:掌握偏函數 partial,用函數更絲滑!

🧩 Python 小練習系列 | Vol.14:掌握偏函數 partial,用函數更絲滑! 本節的 Python 小練習系列我們將聚焦一個 冷門但高能 的工具 —— functools.partial。它的作用類似于“函數的預設模板”,能幫你寫出更加靈活、優雅…

開源 PDF.js 文件編輯操作

一、PDF.js PDF.js 是 Mozilla 基金會推出的一個使用 HTML5 構建的 PDF 閱讀器,它完全使用 JavaScript 編寫。作為 Firefox 瀏覽器的默認 PDF 查看器,PDF.js 具有強大的兼容性和穩定性。它不僅支持 PDF 文件的查看和渲染,還提供了豐富的交互…

3D珠寶渲染用什么軟件比較好?渲染100邀請碼1a12

印度珠寶商 Mohar Fine Jewels 和英國寶石商 Gemfields 在今年推出了合作珠寶系列——「Emeralds in Full Bloom」,它的靈感源自花草綻放的春季田野,共有 39 件作品,下面這個以植物為主題的開口手鐲就是其中一件。 在數字時代,像這…

增益調度控制 —— 理論、案例與交互式 GUI 實現

目錄 增益調度控制 —— 理論、案例與交互式 GUI 實現一、引言二、增益調度控制的基本原理三、數學模型與公式推導四、增益調度控制的優勢與局限4.1 優勢4.2 局限五、典型案例分析5.1 案例一:航空飛行控制中的增益調度5.2 案例二:發動機推力控制中的增益調度5.3 案例三:化工…

PyTorch數據加載流程解析

1. 定義最簡單的Dataset import torch from torch.utils.data import Dataset, DataLoaderclass MyDataset(Dataset):def __init__(self, data):self.data data # 假設data是一個列表,如[10, 20, 30, 40]def __len__(self):return len(self.data) # 返回數據總量…

xsync腳本是一個基于rsync的工具

xsync腳本是一個基于rsync的工具,用于在集群間高效同步文件或目錄。以下是xsync腳本的詳細使用方法和配置步驟: 一、xsync腳本的作用 xsync腳本可以快速將文件或目錄分發到集群中的多個節點,避免了手動逐臺復制文件的繁瑣操作。它利用rsync…

250408_解決加載大量數據集速度過慢,耗時過長的問題

250408_解決加載Cifar10等大量數據集速度過慢,耗時過長的問題(加載數據時多線程的坑) 在做Cifar10圖像分類任務時,發現每個step時間過長,且在資源管理器中查看顯卡資源調用異常,主要表現為,顯卡…

Ansible的使用2

#### 一、Ansible變量 ##### facts變量 > facts組件是Ansible用于采集被控節點機器的設備信息,比如IP地址、操作系統、以太網設備、mac 地址、時間/日期相關數據,硬件信息等 - setup模塊 - 用于獲取所有facts信息 shell ## 常用參數 filter…

多模態大語言模型arxiv論文略讀(六)

FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ?? 論文標題:FashionLOGO: Prompting Multimodal Large Language Models for Fashion Logo Embeddings ?? 論文作者:Zhen Wang, Da Li, Yulin Su, Min Yang,…

MySQL深入

體系結構 連接層:主要處理客戶端的連接進行授權認證、校驗權限等相關操作 服務層:如sql的接口、解析、優化在這里完成,所有跨存儲引擎的操作在這里完成 引擎層:索引是在存儲引擎層實現的,所以不同的存儲引擎他的索引…

智能 SQL 優化工具 PawSQL 月度更新 | 2025年3月

📌 更新速覽 本月更新包含 21項功能增強 和 9項問題修復,重點提升SQL解析精度與優化建議覆蓋率。 一、SQL解析能力擴展 ? 新增SQL語法解析支持 SELECT...INTO TABLE 語法解析(3/26) ALTER INDEX RENAME/VISIBLE 語句解析&#…

數組劃分使元素總和最接近

0劃分 - 藍橋云課 將一個數組劃分為兩個元素總和最接近的兩個數組 要使得兩組權值的乘積最大,根據數學原理,當兩組權值越接近時,它們的乘積就越大。因此,可以將這個問題轉化為一個 0 - 1 背包問題,把所有數的總和的一…

多線程代碼案例(線程池)- 4

目錄 引入 標準庫中的線程池 -- ThreadPoolExecutor 研究一下這個方法的幾個參數 1. int corePoolSize 2. int maximumPoolSize 3. long keepAliveTime 4. TimeUnit unit 5. BolckingQueue workQueue 6. ThreadFactory threadFactory 7. RejectedExecutionHandler h…

C,C++,C#

C、C 和 C# 是三種不同的編程語言,雖然它們名稱相似,但在設計目標、語法特性、運行環境和應用場景上有顯著區別。以下是它們的核心區別: 1. 設計目標和歷史 語言誕生時間設計目標特點C1972(貝爾實驗室)面向過程&#…

nginx 代理 https 接口

代碼中需要真實訪問的接口是:https://sdk2.028lk.com/application-localizationdev.yml文件中配置: url: http:/111.34.80.138:18100/sdk2.028lk.com/該服務器111.34.80.138上 18100端口監聽,配置信息為: location /sdk2.028lk.c…

數據結構實驗3.1:順序棧的基本操作與進制轉換

文章目錄 一,問題描述二,基本要求三,算法分析四,示例代碼五,實驗操作六,運行效果 一,問題描述 在數據處理中,常常會遇到需要對鏈接存儲的線性表進行操作的情況。本次任務聚焦于將鏈…

經典頻域分析法(Bode圖、Nyquist判據) —— 理論、案例與交互式 GUI 實現

目錄 經典頻域分析法(Bode圖、Nyquist判據) —— 理論、案例與交互式 GUI 實現一、引言二、經典頻域分析方法的基本原理2.1 Bode 圖分析2.2 Nyquist 判據三、數學建模與公式推導3.1 一階系統的頻域響應3.2 多極系統的 Bode 圖繪制3.3 Nyquist 判據的數學描述四、經典頻域分析…

Vue知識點(5)-- 動畫

CSS 動畫是 Vue3 中實現組件動畫效果的高效方式,主要通過 CSS transitions 和 keyframes 動畫 CSS Keyframes(關鍵幀動畫) 用來創建復雜的動畫序列,可以精確控制動畫的各個階段。 核心語法: keyframes animationNa…

小型園區網實驗

劃分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool

使用LangChain Agents構建Gradio及Gradio Tools(6)——創建自己的GradioTool 本篇摘要16. 使用LangChain Agents構建Gradio及Gradio Tool16.6 創建自己的GradioTool16.6.1 創建步驟16.6.2 創建示例StableDiffusionTool參考文獻本章目錄如下: 《使用LangChain Agents構建Grad…