基于STM32定時器中斷講解(HAL庫)

基于STM32定時器中斷講解(HAL庫)

1、定時器簡單介紹

以STM32F103C8T6中幾個定時器為例

  1. TIM1:這是一個高級定時器,不僅具備基本的定時中斷功能,還擁有內外時鐘源選擇、輸入捕獲、輸出比較、編碼器接口以及主從觸發模式等多種功能。這使得TIM1能夠適用于各種復雜的應用場景,為開發者提供強大的時間控制和信號處理能力。
  2. TIM2、TIM3和TIM4:這些是通用定時器,同樣具有定時功能,但在功能上與高級定時器有所區別。通用定時器通常用于實現一些基本的定時任務,如LED閃爍、脈沖寬度測量等。
    每個定時器都由一個**16位計數器、預分頻器和自動重裝寄存器的時基單元組成。**預分頻器可以對時鐘進行分頻,計數器則對預分頻后的時鐘進行計數。當計數器的值達到設定值時,會觸發中斷,從而執行相應的定時任務。
    以下是總結框圖
    在這里插入圖片描述

2、定時器工作原理

定時器核心是計數器。
在這里插入圖片描述
在這里插入圖片描述

講解:首先時鐘源經過預分頻器(一般為72MHZ/36MHZ),內部一般取72,然后進行計數,當計數器時間超過預設時間,則會產生中端。ARR是為了將CNT進行自動清空,重新計數。

3、定時器框圖

參考stm32f103c8t6中文參考手冊:
在這里插入圖片描述
為防止看不同,特地將此圖進行簡化,以下是簡化圖:
在這里插入圖片描述
結合手冊進行觀看。【注意:PSC寫0則為1分頻】

4、定時器計數模式

計數模式主要分為向上計數、向下計數、中心對齊計數。
在這里插入圖片描述
下圖為三種計數方式的圖解:

在這里插入圖片描述
當溢出時則會觸發中斷。一般采用向上計數。

5、定時器溢出時間計算

在這里插入圖片描述
舉例:如用內部時鐘源72MHZ則(PSC+1)/F=T=1/f,表示計一個數所用的時間。ARR為重裝載,根據所需要的時間Tout來配置重裝載(ARR+1)表示要計的數目。
比如要計500ms,則ARR可以為4999,PSC為7199。

6、定時器中斷的配置

#include "timer.h"
#include "led.h"
TIM_HandleTypeDef timer_handle = {0};//定義結構體//時基工作參數配置
void timer_init(uint16_t ARR,uint16_t PSC)//傳入ARR自動重裝寄存器和PSC分頻(16位寄存器)
{timer_handle.Instance = TIM2;//用哪個時鐘timer_handle.Init.Prescaler = PSC;//PSC分頻timer_handle.Init.Period = ARR;//傳入ARR自動重裝寄存器的值timer_handle.Init.CounterMode = TIM_COUNTERMODE_UP;//計數模式向上計數timer_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;//自動重載寄存器(可用可不用)HAL_TIM_Base_Init(&timer_handle);HAL_TIM_Base_Start_IT(&timer_handle);
}//map函數
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)//弱函數經常被其他函數直接自動調用
{if(htim->Instance == TIM2){__HAL_RCC_TIM2_CLK_ENABLE();HAL_NVIC_SetPriority(TIM2_IRQn,2,2);HAL_NVIC_EnableIRQ(TIM2_IRQn);}}//中斷服務函數編寫
void TIM2_IRQHandler(void)
{HAL_TIM_IRQHandler(&timer_handle);//公共中斷函數
}//回調函數配置
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//弱函數經常被其他函數直接自動調用
{
if(htim->Instance == TIM2)
{led_toggle();//寫入功能,根據自己需要進行完善
}
}
//弱函數拿指針定義,其余拿變量    

附圖:在這里插入圖片描述
定時器中斷配置圖。

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

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

相關文章

UE5 項目遷移 注意事項記錄

做項目的時候項目越做越大 132g的體量一旦移動復制就耗時間 這個時候遷移派上了用場 前置知識:會使用基本ue遷移流程 以下是遷移注意事項 遷移步驟 首先把項目插件plugins復制粘貼到新項目中其次把.project文本形式 全部復制粘貼新項目中開始遷移項目 選中要遷移的…

套接字+Socket連接

制作加載中動畫: 創建Panel,制作預制體,在Image游戲物體中添加DOTween插件,相關設置如下: (此為DOTween Pro,需付費,也可按下面的數值編寫代碼解決) Socket套接字 套接字就是將IP地址與主機端口號合并在一…

第 11 屆藍橋杯 C++ 青少組中 / 高級組省賽 2020 年真題答和案解析

一、選擇題 第 1 題 單選題 題目:表達式 ‘6’ - ‘1’ 的值是 ( ) A. 整數 5 B. 字符 5 C. 表達式不合法 D. 字符 6 答案:A 解析:在 C++ 中,字符常量以 ASCII 碼形式存儲。6 的 ASCII 碼為 54,1 的 ASCII 碼為 49,二者相減結果為 5,是整數類型,因此選 A。 第 2 題 …

使用Rust + WebAssembly提升前端渲染性能:從原理到落地

一、問題背景:為什么選擇WebAssembly? 最近在開發數據可視化大屏項目時,我們遇到了一個棘手的問題:前端需要實時渲染10萬數據點的動態散點圖,使用純JavaScript Canvas方案在低端設備上幀率不足15FPS。經過性能分析&a…

【沐風老師】3DMAX按元素UV修改器插件教程

3DMAX按元素UV修改器UV By Element是一個腳本化的修改器插件。對于需要創建隨機化紋理效果的用戶而言,3DMAX的UV By Element修改器無疑是一款高效工具,它將以偽隨機量偏移、旋轉和/或縮放每個元素的UV坐標。 【版本要求】 3dMax 2016及以上 【安裝方法】…

【神經網絡與深度學習】改變隨機種子可以提升模型性能?

引言 隨機種子在機器學習和數據處理領域中至關重要,它決定了模型訓練、數據劃分以及參數初始化的隨機性。雖然固定隨機種子能確保實驗的可重復性,但改變隨機種子有時會意外提升模型性能。本文將探討這一現象的潛在原因,并揭示隨機性如何影響…

java技術總監簡歷模板

模板信息 簡歷范文名稱:java技術總監簡歷模板,所屬行業:其他 | 職位,模板編號:XDNUTA 專業的個人簡歷模板,邏輯清晰,排版簡潔美觀,讓你的個人簡歷顯得更專業,找到好工作…

OpenLayers:偵聽縮放級別的變化

在實際開發中我們常常需要根據不同的縮放級別設置不同的展示效果或者執行不同的操作,因此偵聽縮放級別的變化就很重要。想要偵聽變化就需要依賴于OpenLayers中的事件系統,下面我將介紹兩個相關的事件。 一、地圖事件 moveend 1.介紹 在地圖的移動結束…

Langchain4j基于ElasticSearch的向量數據庫配置后,啟動報錯

報錯信息: co.elastic.clients.elasticsearch._types.ElasticsearchException: [es/search] failed: [search_phase_execution_exception] all shards failedat co.elastic.clients.transport.ElasticsearchTransportBase.getApiResponse(ElasticsearchTransportBase.java:34…

如何解決 403 錯誤:請求被拒絕,無法連接到服務器

解決 403 錯誤:請求被拒絕,無法連接到服務器 當您在瀏覽網站或應用時,遇到 403 錯誤,通常會顯示類似的消息: The request could not be satisfied. Request blocked. We can’t connect to the server for this app o…

PyTorch 2.0編譯模式深度評測:圖優化對GPU利用率的影響

一、編譯革命的性能拐點 PyTorch 2.0的torch.compile通過TorchDynamo與XLA兩種編譯模式,將動態圖執行效率推向新高度。本文基于NVIDIA A100與Google TPUv4硬件平臺,通過ResNet-50、Transformer-XL等典型模型,揭示不同編譯策略對GPU資源利用率…

在CentOS環境中安裝MySQL數據庫保姆級教程

一.確認當前系統版本 1.1登錄系統,切換至root賬戶 如圖所示: 1.2:在終端中執行如下命令查看系統版本 cat /etc/redhat-release 二.添加 MySQL Yum 源 2.1訪問MySQL開發者專區 https://dev.mysql.com/downloads/repo/yum/ TIPS: 1.發布包命…

SpringBoot智能排課系統源碼開發與實現

概述 基于SpringBoot框架開發的智能排課系統。該系統是一款功能完善的校園管理系統,包含管理員、教師和學生三種角色權限,實現了課程管理、排課算法、成績錄入等核心功能,是學習SpringBoot開發和企業級項目實踐的優質資源。 主要內容 1. 管…

探秘 RocketMQ 的 DLedgerServer:MemberState 的技術解析與深度剖析

在 RocketMQ 構建高可靠、強一致性消息系統的架構中,DLedgerServer 扮演著舉足輕重的角色,而 MemberState 作為 DLedgerServer 內部用于描述節點狀態的核心類,更是整個分布式日志模塊穩定運行的關鍵。深入理解 MemberState 的設計理念、功能特…

字符串匹配 之 KMP算法

文章目錄 習題28.找出字符串中第一個匹配項的下標1392.最長快樂前綴 本博客充分參考靈神和知乎的另一位博主 靈神KMP算法模版 知乎博主通俗易懂講解 對于給定一個主串S和一個模式串P,如果讓你求解出模式串P在主串S中匹配的情況下的所有的開始下標簡單的做法又稱為Brute-Force算…

Nginx相關知識

目錄 一.HTTP請求數據在服務器中的傳輸與處理詳解 1.2 套字節 1.3 零拷貝技術 二.I/O模型 2.1 I/O模型簡介 2.2 常見的I/O模型及其特點 1.同步/異步 2.阻塞vs 非阻塞 3. 同步/異步與阻塞/非阻塞的關系 4.多路復用I/O模型 5.異步I/O模型 三.Nginx模塊 3.1 概述ng…

分布式數字身份:邁向Web3.0世界的通行證 | 北京行活動預告

數字經濟浪潮奔涌向前,Web3.0發展方興未艾,分布式數字身份(Decentralized Identity,簡稱DID)通過將分布式賬本技術與身份治理相融合,在Web3.0時代多方協作的分布式應用場景中發揮核心作用,是構建…

ES6入門---第三單元 模塊四:Set和WeakSet

set數據結構: 類似數組,但是里面不能有重復值,如果有,只顯示一個 set用法: let setArr new Set([a,b]); setArr.add(a); 往setArr里面添加一項 let setArr new Set().add(a).add(b).add(c); setArr.delete(b); 刪除一項 setArr.ha…

Cognito

首先Cognito沒有提供登錄至AWS控制臺的功能,然而您可以通過Cognito Identity Pool獲取到IAM role的credentials [1],再另外通過代碼自行將IAM role credentials拼湊成AWS控制臺登錄的URL [2]。 最后,由于Cognito的使用除了User Pool以及Iden…

EfficientNet 改進:與Transformer結合的圖像分類模型

1.介紹 在計算機視覺領域,EfficientNet因其高效的網絡架構設計而廣受歡迎。 本文將深入分析一個結合EfficientNet主干和Transformer分類頭的創新模型實現。 模型概述 這個實現將EfficientNet的高效特征提取能力與Transformer的強大序列建模能力相結合,主要包含以下幾個核心…