【STM32】定時器中斷 + 含常用寄存器和庫函數配置(提供完整實例代碼)

通用定時器基礎知識

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

通用定時器工作過程:
在這里插入圖片描述
在這里插入圖片描述

時鐘選擇

計數器時鐘可以由下列時鐘源提供:

① 內部時鐘(CK_INT)
② 外部時鐘模式1:外部輸入腳(TIx)
③ 外部時鐘模式2:外部觸發輸入(ETR)
④ 內部觸發輸入(ITRx):使用一個定時器作為另一個定時器的預分頻器,如可以配置一個定時器Timer1而作為另一個定時器Timer2的預分頻器。

內部時鐘選擇:

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

時鐘計算方法:

在這里插入圖片描述

默認調用SystemInit函數情況下:
SYSCLK=72M
AHB時鐘=72M
APB1時鐘=36M
所以APB1的分頻系數=AHB/APB1時鐘=2
所以,通用定時器時鐘CK_INT=2*36M=72M

計數器模式

在這里插入圖片描述

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

向上計數模式(時鐘分頻因子=1)

在這里插入圖片描述

在這里插入圖片描述

向下計數模式(時鐘分頻因子=1)

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

中央對齊計數模式(時鐘分頻因子=1 ARR=6)

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


定時器中斷實驗相關寄存器(常用寄存器和庫函數配置)

在這里插入圖片描述
常見中斷類型(圖參考):

TIM_IT_Update:更新中斷,計數器向上溢出/向下溢出,計數器初始化(通過軟件或者內部/外部觸發) TIM_IT_CC1~4:都是捕獲/比較中斷,貌似都是平等的,即輸入捕獲,輸出比較TIM_IT_Trigger:觸發事件(計數器啟動、停止、初始化或者由內部/外部觸發計數)使用的時候都是調用函數TIM_ITConfig()來使能指定的中斷類型,調用TIM_GetITStatus()函數來查看是否有中斷發生,入口參數都是平等的。可能就是不同的事件導致中斷的發生略有不同
中斷類型說明
更新中斷TIM_IT_Update計數器溢出
比較中斷TIM_IT_CCx CNT = CCRx
觸發中斷TIM_IT_Trigger外部/同步/軟件觸發
定時器中斷原理

通用定時器通過以下機制產生中斷:

計數器計滿(向上數到 ARR,或向下數到 0)
觸發“更新事件(UEV)”
觸發 UIF 標志位(TIMx_SR 寄存器)
如果 UIE 允許(TIMx_DIER),則進入中斷服務函數(TIMx_IRQHandler)

通用定時器常用寄存器和庫函數

通用定時器常用寄存器
寄存器名位名功能說明
TIMx_PSCPSC[15:0]預分頻器值,CNT時鐘 = TIMxCLK / (PSC+1)
TIMx_ARRARR[15:0]自動重裝載寄存器,決定計數上限
TIMx_CNTCNT[15:0]當前計數器數值
TIMx_CR1CEN使能計數器(1為啟動)
DIR計數方向:0為向上,1為向下
CMS[1:0]中心對齊模式
ARPE自動重裝載緩沖使能
TIMx_DIERUIE允許更新中斷
CCxIE允許比較中斷(CC1~CC4)
TIMx_SRUIF更新中斷標志位(需手動清除)
CCxIF捕獲/比較中斷標志位
TIMx_EGRUG軟件強制生成更新事件(UEV)

計數器當前值寄存器CNT:
在這里插入圖片描述

預分頻寄存器TIMx_PSC:
在這里插入圖片描述

自動重裝載寄存器(TIMx_ARR):
在這里插入圖片描述

控制寄存器1(TIMx_CR1):
在這里插入圖片描述

DMA中斷使能寄存器(TIMx_DIER):
在這里插入圖片描述

補充說明:

  • ARR緩沖控制:ARPE 位決定 ARR 是否緩沖(CR1 寄存器)
  • 中斷標志手動清除:UIF 必須手動清除,否則中斷會持續進入
  • 定時器時鐘來源
    • APB1 × 2(如果 APB1分頻 ≠ 1)
    • TIMxCLK = 72MHz(如 STM32F103)
常用庫函數:

定時器參數初始化:

 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
typedef struct
{uint16_t TIM_Prescaler;        uint16_t TIM_CounterMode;     uint16_t TIM_Period;        uint16_t TIM_ClockDivision;  uint8_t TIM_RepetitionCounter;
} TIM_TimeBaseInitTypeDef; 
TIM_TimeBaseStructure.TIM_Period = 4999; 
TIM_TimeBaseStructure.TIM_Prescaler =7199; 
TIM_TimeBaseStructure.TIM_ClockDivision =  TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_CounterMode =  TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

定時器使能函數:

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);

定時器中斷使能函數:

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

狀態標志位獲取和清除:

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatus TIM_GetITStatus<

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

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

相關文章

集群Redis

文章目錄前言一、Redis主從復制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.啟動服務1.3.檢查成果二、Redis集群配置2.1.服務器40.240.34.91集群配置2.2.其它服務器xxx.92,xxx.93集群配置2.3.啟動服務2.3.啟動集群服務2.4.檢查成果三、優劣四、結束前言 提示&…

ORA-600 kokiasg1故障分析---惜分飛

故障總結:客戶正常關閉數據庫,然后啟動報ORA-600 kokiasg1錯誤,通過對啟動分析確認是由于IDGEN1$序列丟失導致,修復該故障之后,數據庫啟動成功,但是后臺大量報ORA-600 12803,ORA-600 15264等錯誤,業務用戶無法登錄.經過深入分析,發現數據庫字典obj$中所有核心字典的序列全部被刪…

[RPA] 影刀RPA基本知識

1.應用的構成一個應用&#xff1a;由多條指令疊加組成一條指令代表了一個操作動作許多條指令按照一定的邏輯關系編排起來&#xff0c;就構成了一個應用(這里的應用可理解為軟件機器人RPA)一個應用 多個自動化指令的集合 2. 指令的一般構成在XXX對象上&#xff0c;對XXX元素執行…

pytest中測試特定接口

在pytest中只測試特定接口有以下幾種常用方法&#xff1a; 1. 通過測試函數名精確匹配 直接指定測試文件和函數名&#xff1a; pytest test_api.py::test_upload_image_with_library這將只運行test_api.py文件中名為test_upload_image_with_library的測試函數。 2. 使用關鍵字匹…

HMI圖形渲染優化:OpenGL ES與Vulkan的性能對比實戰

HMI 圖形渲染優化&#xff1a;OpenGL ES 與 Vulkan 的性能對比實戰**摘要想讓 HMI 界面的圖形渲染又快又流暢&#xff0c;卻在 OpenGL ES 和 Vulkan 之間糾結不已&#xff01;用 OpenGL ES&#xff0c;擔心性能不夠強勁&#xff0c;無法滿足復雜場景需求&#xff1b;選 Vulkan&…

Python數據分析基礎01:描述性統計分析

下一篇&#xff1a; 《Python數據分析基礎04&#xff1a;預測性數據分析》 《Python數據分析基礎03&#xff1a;探索性數據分析》 《python數據分析基礎02&#xff1a;數據可視化分析》 《Python數據分析基礎01&#xff1a;描述性統計分析》 描述性統計分析是統計學中最基…

成員不更新項目進度,如何建立進度更新機制

項目成員不及時更新進度的主要原因包括責任不明確、缺乏更新規則、溝通機制不暢、進度意識薄弱、工具使用不當等。其中尤其需要關注的是建立清晰的進度更新規則。明確規定成員應何時、如何、向誰匯報進度情況&#xff0c;使得項目的每項任務都有責任人和明確的更新頻率及形式&a…

JVM 整體架構詳解:線程私有與線程共享內存區域劃分

Java 虛擬機&#xff08;JVM&#xff09;作為 Java 程序運行的基礎&#xff0c;其內存模型和線程結構設計直接影響著程序的執行效率和穩定性。本文將從 線程是否共享 的角度出發&#xff0c;對 JVM 的整體內存結構進行清晰分類與簡明解析。一、JVM 內存區域劃分概覽 根據是否被…

【Linux庖丁解牛】— 庫的理解與加載!

1. 目標文件編譯和鏈接這兩個步驟&#xff0c;在Windows下被我們的IDE封裝的很完美&#xff0c;我們?般都是?鍵構建?常?便&#xff0c; 但?旦遇到錯誤的時候呢&#xff0c;尤其是鏈接相關的錯誤&#xff0c;很多?就束??策了。在Linux下&#xff0c;我們之前也學 習過如…

QML事件處理:鼠標、拖拽與鍵盤事件

在QML應用開發中&#xff0c;用戶交互是構建動態界面的核心。本文將全面解析QML中的三大交互事件&#xff1a;鼠標事件、拖拽事件和鍵盤事件&#xff0c;通過實際代碼示例展示如何實現豐富的用戶交互體驗。一、鼠標事件處理1. MouseArea基礎MouseArea是QML中處理鼠標交互的核心…

MySQL 8.0 OCP 1Z0-908 題目解析(20)

題目77 Choose the best answer. Which step or set of steps can be used to rotate the error log? ○ A) Execute SET GLOBAL max_error_count . ○ B) Rename the error log file on disk, and then execute FLUSH ERROR LOGS. ○ C) Execute SET GLOBAL log_error ‘’…

八股學習(四)---MySQL

一、MySQL如何進行SQL調優&#xff1f;我的回答&#xff1a;面試官好&#xff01;我想從SQL語句本身和數據庫結構兩方面來做MySQL的SQL調優。首先會優化SQL寫法&#xff0c;比如避免用SELECT *、減少子查詢嵌套&#xff0c;用JOIN代替&#xff0c;還有合理使用索引&#xff0c;…

華中科大首創DNN衍射量子芯片登《Science Advances》:3D打印實現160μm3高維邏輯門

01 前言華中科技大學王健/劉駿團隊在《Science Advances》發表突破性研究&#xff0c;利用飛秒激光三維打印技術&#xff0c;制造出全球首個聚合物基超緊湊高維量子光芯片。該芯片僅160微米見方&#xff08;約頭發絲直徑的1.5倍&#xff09;&#xff0c;卻實現了光子空間模式的…

【排序】插入排序

如果你已經對排序略知一二&#xff0c;現在正在復習排序的一些重點知識 ------------------------------------------------------------------------------------------------------------------------- 點贊收藏&#x1f308;&#xff0c;每天更新總結文章&#xff08;多以圖…

扣子Coze怎么模仿人類輸出(分段輸出)?

效果&#xff1a; 讓AI回復的更像人類 教程&#xff1a; 工作流&#xff1a; 假設大模型節點就是需要的回復&#xff0c;并且已經按句號&#xff08;。&#xff09;區別開每句話 后面連接一個 文本處理 節點&#xff0c;選擇“字符串分隔”&#xff0c;按“。”進行分割 分…

Android 應用開發 | 一種限制拷貝速率解決因 IO 過高導致系統卡頓的方法

文章目錄一、問題背景二、代碼實現一、問題背景 經常做 Android 應用的小伙伴應該會有經驗&#xff0c;就是如果應用在寫入文件的時候&#xff0c;即使寫文件的動作是在子線程&#xff0c;也會出現 UI 上的卡頓&#xff0c;這是因為文件的 IO 是由內核去完成的&#xff0c;此時…

力扣面試150(19/150)

7.7 12. 整數轉羅馬數字 七個不同的符號代表羅馬數字&#xff0c;其值如下&#xff1a; 符號值I1V5X10L50C100D500M1000 羅馬數字是通過添加從最高到最低的小數位值的轉換而形成的。將小數位值轉換為羅馬數字有以下規則&#xff1a; 如果該值不是以 4 或 9 開頭&#xff0c;…

數據結構與算法——從遞歸入手一維動態規劃【1】

前言&#xff1a; 簡單記錄對左程云系列算法課程--算法講解066【必備】的學習&#xff0c;這是第一篇。主要提供C代碼和一些簡單的個人理解&#xff0c;如需要細致講解請移步原視頻。 涉及內容&#xff1a; 斐波那契數列、動態規劃 參考視頻&#xff1a; 左程云--算法講解…

搭建個人博客系列--Nacos 注冊中心

基礎項目已完成&#xff0c;接下來就是SpringCloud的各種組件了。 那你又要問&#xff1a;既然有Nacos為什么之前還裝了Apollo&#xff1f; 那你別管&#xff0c;那不得什么都會點&#xff0c;不然怎么找工作。干就完了。 一、安裝Nacos 管他三七二十一&#xff0c;先在doc…

前端實習總結——案例與大綱

以下是一個結合真實場景的前端面試案例&#xff0c;包含面試流程、核心問題、候選人回答思路及面試官考察點&#xff0c;可直觀感受如何在面試中展現實習/項目經歷&#xff1a; 案例背景 候選人&#xff1a;應屆生&#xff0c;有6個月前端實習經歷&#xff0c;參與過“企業內部…