STM32CUBEMX 使用教程6 — TIM 定時器配置、定時中斷

往期文章推薦:

STM32CUBEMX 使用教程5 — DMA配置 & 串口結合DMA實現數據搬運

STM32CUBEMX 使用教程4 — 串口 (USART) 配置、重定向 printf 輸出

STM32CUBEMX 使用教程3 — 外部中斷(EXTI)的使用

STM32CUBEMX 使用教程2 — GPIO的使用、輸入/輸出

STM32CUBEMX 使用教程 1 — 配置環境、新建工程

STM32CUBEMX 詳細安裝教程

一、了解什么是定時器

什么是定時器?定時器實現的基本原理是什么?定時器可以做什么?

為了能搞懂上面的問題,文章直接用STM32F103ZET6作講解說明定時器的原理和基本用途。

STM32F103的定時器屬于MCU內部的硬件資源,數量有很多,分類上大致分為:

1)基本定時器

2)通用定時器

3)高級定時器

這里用基本定時器說明工作原理,如下的基本定時器的框圖:

首先需要明確的事情:定時器的本質就是一個計數器,通過在一定的計數頻率下計量一定的裝載值實現計數定時的功能。

如上圖中:基本定時器中有一個 CNT計數器(1)用來計數,這個計數器的計數值來自于重裝載寄存器。基本定時的時鐘(2)來源于RCC的時鐘(實際為APB2),通過控制器(4)復位、使能定時器功能,并通過PSC預分頻器(3)設置時鐘的分頻提供給CNT計數器。從而實現計數器在某個頻率下計數,達到裝載值寄存器中的設定數時完成計數,實現時間定時。

二、STM32F103 的定時器其他特性

(1)計數模式

STM32F103中的定時器除了基本定時器(僅有向上計數),其他的定時器都有向上計數、向下計數、中央對齊模式(向上/向下計數)。

向上計數模式:計數器從0計數到自動加載值(TIMx_ARR計數器的內容),然后重新從0開始計數并且產生一個計數器溢出事件。

向下模式:計數器從自動裝入的值(TIMx_ARR計數器的值)開始向下計數到0,然后從自動裝入的值重新開始并且產生一個計數器向下溢出事件。

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

(2)更新中斷

所有的定時器都可以產生更新中斷事件,在定時器計數到裝載值時溢出,會產生更新事件 UEV ,如果設置了中斷允許標志位,還會生成更新中斷 UIF并跳轉至中斷入口地址處(中斷函數)。

如下是向上模式下溢出后生成更新事件和更新中斷的時序圖:

(3)輸入捕獲模式

在輸入捕獲模式下,當檢測到ICx信號上相應的邊沿后,計數器的當前值被鎖存到捕獲/比較寄存器(TIMx_CCRx)中。當發生捕獲事件時,相應的CCxIF標志(TIMx_SR寄存器)被置1,如果開放了中斷或者DMA操作,則將產生中斷或者DMA請求。

(4)PWM 模式

脈沖寬度調制模式可以產生一個由TIMx_ARR寄存器確定頻率、由TIMx_CCRx寄存器確定占空比的信號。在TIMx_CCMRx寄存器中的OCxM位寫入‘110’(PWM模式1) 或‘111’(PWM模式2),能夠獨立地設置每個OCx輸出通道產生一路PWM。

基本定時器、通用定時器、高級定時器的比較:

三、STM32CUBEMX 配置定時器

配置定時器 TIM2 定時100ms,超時溢出后產生更新中斷。

需要先介紹一下定時器怎么實現固定時間的定時:

1)在STM32F103 中 TIM2 的時鐘來源于 APB1 的 2 倍,即 72 MHz;

2)TIM2的預分頻系數 1~65535 可選;

3)定時器計數器 CNT 為 16bit,最大值 65535;

所以定時器的超時時間計算公式如下:

Tout = ((Psc + 1) x (arr + 1))/ 72000000 s
其中:
Tout:定時器超時溢出時間
Psc:預分頻系數
arr:裝載值。也就是計數器的計數值
上面的方式計算出來的是單位是秒!!!

要定時100ms的時間,按照上面的公式,Psc = 7199,arr = 999,得到 Tout = 0.1s = 1000ms。

相關配置如下:

(1)因為只需要作為定時使用,所以比較簡單,開始定時器,并配置相關的定時參數即可。如下:

(2)開啟定時器中斷功能,只有開啟了才能觸發溢出中斷,如下:

(3)配置中斷的優先級,包括搶占優先級,子優先級。如下:

生成代碼后,在文件 tim.c 中 TIM2 的配置代碼如下:

TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};/* USER CODE BEGIN TIM2_Init 1 *//* USER CODE END TIM2_Init 1 */htim2.Instance = TIM2;htim2.Init.Prescaler = 7199;htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 999;htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();}

定時器使能和中斷配置如下:

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{if(tim_baseHandle->Instance==TIM2){/* USER CODE BEGIN TIM2_MspInit 0 *//* USER CODE END TIM2_MspInit 0 *//* TIM2 clock enable */__HAL_RCC_TIM2_CLK_ENABLE();/* TIM2 interrupt Init */HAL_NVIC_SetPriority(TIM2_IRQn, 3, 0);HAL_NVIC_EnableIRQ(TIM2_IRQn);/* USER CODE BEGIN TIM2_MspInit 1 *//* USER CODE END TIM2_MspInit 1 */}
}

相應的中斷入口函數在 stm32f1xx_it.c 中,如下:

void TIM2_IRQHandler(void)
{/* USER CODE BEGIN TIM2_IRQn 0 *//* USER CODE END TIM2_IRQn 0 */HAL_TIM_IRQHandler(&htim2);/* USER CODE BEGIN TIM2_IRQn 1 *//* USER CODE END TIM2_IRQn 1 */
}

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

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

相關文章

微信小程序實現table表格

微信小程序沒有table標簽&#xff0c;運用display:table和display:flex實現一個內容字數不固定表格…… wxml&#xff1a; <view class"ContentShow"> <view class"conht">煙臺市新聞發布會登記審批表</view> <view class"tabl…

MySQL 基本面試題

目錄 一、SQL的基本操作 1、SQL查詢的執行順序 2、count(*)、count(1) 、count(列名) 的區別 3、char 和 varchar 的區別 4、MySQL 中常用的基礎函數 5、MySQL的執行流程 6、MyISAM和InnoDB的區別 二、事務 1、事務的基本概念 2、事務的四大特性&#xff08;ACID) 3…

WPF學習筆記(12)下拉框控件ComboBox與數據模板

下拉框控件ComboBox與數據模板 一、ComboBox1. ComboBox概述2. ItemsControl類3. Selector類4. ComboBox類 二、ComboBox數據模板總結 一、ComboBox 1. ComboBox概述 ComboBox類代表一個有下拉列表的選擇控件&#xff0c;供用戶選擇。 官方文檔&#xff1a;https://learn.mic…

Docker for Windows 設置國內鏡像源教程

在使用 Docker 時&#xff0c;由于默認的 Docker Hub 鏡像源位于國外&#xff0c;國內用戶在拉取鏡像時可能會遇到速度慢或連接不穩定的問題。為了加速鏡像拉取&#xff0c;可以將 Docker 配置為使用國內鏡像源。以下是適用于 Windows 系統的詳細配置方法&#xff1a; 方法一&…

一鍵部署AI工具!用AIStarter快速安裝ComfyUI與Stable Diffusion

AIStarter部署AI工具&#xff0c;讓AI開發更簡單&#xff01;無需研究復雜環境配置&#xff0c;AIStarter平臺提供一鍵安裝ComfyUI和Stable Diffusion&#xff0c;支持多版本選擇&#xff0c;快速上手。以下是詳細步驟&#xff1a; 一、訪問AIStarter市場 下載AIStarter&#x…

Python基礎(吃洋蔥小游戲)

下面我將為你設計一個"吃洋蔥小游戲"的Python實現方案&#xff0c;使用Pygame庫開發。這個游戲模擬吃洋蔥的過程&#xff0c;玩家需要收集不同種類的洋蔥以獲得高分&#xff0c;同時避免吃到辣椒。 &#x1f9c5; 吃洋蔥小游戲 - Python實現方案 &#x1f3ae; 1. …

Objective-C 路由表原理詳解

在 Objective-C 中實現路由表是組件化架構的核心&#xff0c;它通過 URL 映射機制實現模塊間解耦通信。以下是完整實現原理&#xff1a; 一、核心架構設計 #mermaid-svg-5jMinPiZe8mivAbi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fil…

通過交互式網頁探索傳輸現象-AI云計算數值分析和代碼驗證

傳輸過程涉及質量、動量和能量等物理量在各種系統中的基本運動和轉移&#xff0c;主要分為動量傳輸、熱量傳輸和質量傳輸&#xff0c;在工程、環境科學、生物學和物流等領域至關重要。 傳輸過程是指物理量&#xff08;如質量、動量和能量&#xff09;在物理、化學、生物或工程系…

使用Rust原生實現小波卡爾曼濾波算法

一、算法原理概述小波變換&#xff08;Wavelet Transform&#xff09;通過多尺度分解將信號分為高頻&#xff08;細節&#xff09;和低頻&#xff08;近似&#xff09;部分&#xff0c;高頻通常包含噪聲&#xff0c;低頻保留主體信息。使用Haar小波&#xff08;計算高效&#x…

leetcode 3304. 找出第 K 個字符 I 簡單

Alice 和 Bob 正在玩一個游戲。最初&#xff0c;Alice 有一個字符串 word "a"。 給定一個正整數 k。 現在 Bob 會要求 Alice 執行以下操作 無限次 : 將 word 中的每個字符 更改 為英文字母表中的 下一個 字符來生成一個新字符串&#xff0c;并將其 追加 到原始的…

數字人分身+矩陣系統聚合+碰一碰發視頻: 源碼搭建-支持OEM

以下是關于數字人分身、矩陣系統聚合及碰一碰發視頻功能的源碼搭建與OEM支持的方案整理&#xff1a;核心技術模塊數字人分身技術 使用深度學習框架&#xff08;如PyTorch或TensorFlow&#xff09;訓練生成對抗網絡&#xff08;GAN&#xff09;或變分自編碼器&#xff08;VAE&am…

【LeetCode 熱題 100】189. 輪轉數組——(解法一)額外數組

Problem: 189. 輪轉數組 題目&#xff1a;給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數。 文章目錄 整體思路完整代碼時空復雜度時間復雜度&#xff1a;O(N)空間復雜度&#xff1a;O(N) 整體思路 這段代碼旨在解決一個經典的…

【PyCharm 2025.1.2配置debug】

大家先看下我的配置 1.調試配置 選擇 FastAPI 框架名稱-》 自定義應用程序文件&#xff1a;必須選擇當前項目的main.pyUvicorn 選項&#xff1a;這是啟動命令&#xff0c;有第三步的選擇 main.py 所以只需要–reload即可&#xff0c;如果想自定義啟動端口補充–port xxxxPytho…

Python數據庫軟件:查詢與預測功能集成系統

Python數據庫軟件:查詢與預測功能集成系統 概述 本文將詳細介紹一個具備查詢和模型預測功能的Python數據庫軟件的設計與實現。該系統基于Python開發,使用Excel作為數據存儲格式,包含約15個功能頁面,支持數據管理、查詢分析、模型預測等核心功能。 系統架構 技術棧 核心…

什么是持續集成/持續交付(CI/CD)?

基本概念 CI/CD旨在通過自動化流程提高代碼質量、加快發布速度 CI &#xff08;Continuous Integration&#xff0c;持續集成&#xff09;CD&#xff08;Continuous Delivery/Deployment&#xff0c;持續交付/持續部署&#xff09; CI 持續集成 目標 頻繁加粗樣式將代碼合…

核彈級漏洞

CVE-2025-6018 漏洞介紹&#xff1a; 該漏洞是Linux PAM&#xff08;可插拔認證模塊&#xff09;中的一個本地權限提升漏洞&#xff0c;主要存在于openSUSE Leap 15和SUSE Linux Enterprise 15的PAM配置中。由于PAM規則錯誤地將檢查條件設置為用戶存在SSH或TTY會話&#xff0c…

LabVIEW自動扶梯振動監測

利用LabVIEW開發平臺構建自動扶梯機械振動數據采集系統&#xff0c;實現驅動主機、減速器、梯級等關鍵部位的振動信號實時采集、頻譜分析、數據存儲及故障特征提取。系統通過加速度傳感器與高速數據采集卡的協同工作&#xff0c;結合 LabVIEW 圖形化編程的高效數據處理能力&…

PTA最少交換次數

最少交換次數 分數 15 作者 計科G隊長 單位 重慶大學 長度為N的數組中只有1&#xff0c;2&#xff0c;3三種值&#xff0c;要按升序排序&#xff0c;并且只能通過數值間的兩兩交換實現不能移位。比如某項競賽的優勝者按金銀銅牌排序&#xff0c;或者荷蘭國旗問題都是該問題…

LiteHub中間件之跨域訪問CORS

跨域訪問CORS 原理基本概念簡單請求非簡單請求&#xff08;預檢請求&#xff09; 代碼實現服務器端Cors的關鍵配置服務端解析預檢請求服務端填充響應 抓包分析 原理 基本概念 在瀏覽器安全模型中&#xff0c;同源策略是最重要的安全基石。 一個“域”是由3個要素組成的&#…

FastAPI開發教程

FastAPI 是一個現代、高性能的 Python Web 框架&#xff0c;專為構建 APIs 設計。它基于 Python 類型提示&#xff0c;支持異步編程&#xff0c;并提供自動生成的交互式文檔&#xff08;Swagger UI 和 ReDoc&#xff09;。以下是 FastAPI 開發的核心指南&#xff1a; 1. 安裝 …