STM32第二十一天定時器TIM

1 定時器基礎知識
a:上來說就是用來定時的機器,是存在于STM32單片機中的一個外設。STM32總共有8個定時器,分別是2個高級定時器(TIM1、TIM8),4個通用定時器 (TIM2、TIM3、TIM4、TIM5) 和2個基本定時器 (TIM6、TIM7),如下圖所示:|
STM32F10X系列總共最多有八個定時器:

?STM32F103C8T6核心定時器 (5個)

  1. TIM1 (高級控制定時器 - Advanced-control timer)

    • 16位向上/向下計數器

    • 4個獨立通道(可用于輸入捕獲、輸出比較、PWM生成)

    • 支持互補輸出帶死區插入(非常適合電機控制、電源轉換)

    • 支持編碼器接口

    • 支持剎車信號輸入

    • 最高可達72MHz計數時鐘。

  2. TIM2 (通用定時器 - General-purpose timer)

    • 16位向上/向下計數器

    • 4個獨立通道(輸入捕獲、輸出比較、PWM)

    • 支持編碼器接口

    • 具有32位可編程預分頻器(提供非常精細的時鐘分頻)。

    • 最高可達72MHz計數時鐘。

  3. TIM3 (通用定時器 - General-purpose timer)

    • 16位向上/向下計數器

    • 4個獨立通道(輸入捕獲、輸出比較、PWM)

    • 支持編碼器接口

    • 最高可達72MHz計數時鐘。

  4. TIM4 (通用定時器 - General-purpose timer)

    • 16位向上/向下計數器

    • 4個獨立通道(輸入捕獲、輸出比較、PWM)

    • 支持編碼器接口

    • 最高可達72MHz計數時鐘。

  5. TIM5 (通用定時器 - General-purpose timer)

    • 16位向上/向下計數器

    • 4個獨立通道(輸入捕獲、輸出比較、PWM)

    • 支持編碼器接口

    • 最高可達72MHz計數時鐘。

2.三種STM32定時器的區別:

?即:高級定時器具有捕獲/比較通道和互補輸出,通用定時器只有捕獲/比較通道,基本定時器沒有以上兩者

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

?

二:基本定時器

1.基本定時器的結構框圖

1. 時鐘源
2. 控制器
3. 時基單元

1. 時鐘源 (Clock Sources)

  • 來源:?圖中最上方明確標注了?來自RCC的TIMxCLK

  • 含義:

    • RCC?(Reset and Clock Control):STM32的時鐘控制器模塊,負責產生和分配系統所有時鐘信號。

    • TIMxCLK:這是分配給特定定時器(TIM1, TIM2, TIM3等)的時鐘源。這個時鐘的頻率決定了定時器運行的最快速度。

  • 常見TIMxCLK來源 (STM32F1為例):

    • 內部時鐘 (CK_INT):?這是最常用的模式。通常TIMxCLK直接來源于APB1(低速外設總線,TIM2-4掛在上面)或APB2(高速外設總線,TIM1掛在上面)的時鐘。在標準庫/HAL庫中,調用?HAL_TIM_Base_Init()?或類似初始化函數后,默認選擇的就是內部時鐘。

    • 外部時鐘模式1 (External Clock Mode 1):?時鐘信號來自定時器的特定輸入通道(如TI1, TI2)。通常用于外部脈沖計數或測量外部信號頻率。

    • 外部時鐘模式2 (External Clock Mode 2):?時鐘信號來自ETR引腳(外部觸發輸入)。

    • 內部觸發輸入 (ITRx):?一個定時器可以被另一個定時器觸發,此時觸發信號就成為被觸發定時器的時鐘源。

  • 圖中體現:?來自RCC的TIMxCLK?就是進入定時器的最初時鐘信號。它首先被送入?觸發控制器 (Trigger Controller)?和?時基單元

  • 關鍵點:?時鐘源的選擇和頻率是決定定時器計數速度和精度的最根本因素。

因為APB1的預分頻系數是2,所以是36MHz*2=72MHz;

2:控制器
控制器用于控制定時器:復位、使能、計數、觸發ADC
涉及到的寄存器:CR1/2,DIER,EGR,SR

核心功能
通過寄存器控制定時器的啟停、計數模式、中斷/DMA觸發及事件生成。
關鍵寄存器及作用:

寄存器核心功能關鍵位說明
CR1控制計數方向、使能、預裝載設置CEN:定時器使能位(1=啟動計數)
DIR:計數方向(0=向上,1=向下)
ARPE:ARR預裝載使能(影子寄存器開關)
CR2主模式配置、觸發輸出選擇MMS[2:0]:選擇TRGO觸發源(如更新事件UEV、捕獲比較事件等)
DIER使能中斷/DMA請求UIE:更新事件中斷使能
UDE:更新事件DMA請求使能
EGR軟件強制生成事件UG:置1時立即生成更新事件(強制重載影子寄存器)
SR狀態標志監測UIF:更新事件標志位(需軟件清零)

3:時基(定時器的心臟)
定時器最重要的就是時基部分:包括預分頻器、計數器、自動重裝載寄存器
預分頻器:1-16位預分頻器PSC對內部時鐘CK_PSC進行分頻之后,得到計數器時
CK_INT=CK_PSC/(PSC+1)
CNT在計數器時鐘的驅動下開始計數,計數一次的時間為1/CK_INT
計數器、重裝在寄存器:定時器使能(CEN1)后,計數器CNTCK_CNT驅動
下計數,當TNT值與ARR的設定值相等時就自動生成事件并CNT自動清零,然后
自動重新開始計數,如此重復以上過程。

最終定時周期計算 (以向上計數為例):

  • 定時器時鐘頻率 (CK_CNT) = TIMxCLK / (PSC + 1)

  • 計數器溢出頻率 (更新事件頻率) = CK_CNT / (ARR + 1)

  • 定時周期 (每次更新事件的時間間隔) = (ARR + 1) / CK_CNT = (ARR + 1) * (PSC + 1) / TIMxCLK

例子 (STM32F103C8T6 @72MHz, TIM2 定時1ms):

  • TIMxCLK?(APB1 Timer Clk) = 72 MHz

  • 目標周期 T = 0.001s (1ms)

  • 選擇?PSC = 7199?(分頻系數 7200)

    • CK_CNT?= 72,000,000 Hz / 7200 = 10,000 Hz (周期 0.0001s)

  • 需要計數次數 N = T / (1 / CK_CNT) = 0.001s / 0.0001s = 10

  • 設置?ARR = 9?(因為計數從0到9是10次)

    • 驗證:周期 = (9 + 1) * (7199 + 1) / 72,000,000 = 10 * 7200 / 72,000,000 = 72,000 / 72,000,000 = 0.001s = 1ms ?

這張框圖完美地詮釋了STM32定時器如何利用時鐘源、控制器和時基單元(PSC, CNT, ARR)協同工作來產生精確的定時基礎。理解這三個部分及其相互關系是掌握STM32定時器的關鍵。

.定時時間的計算
定時器時間= (PSC+1)*(ARR+1)/72M

三、影子寄存器:關鍵緩沖機制

存在意義:解決運行時修改參數導致的周期撕裂問題

兩種模式對比
特性啟用影子寄存器 (ARPE=1)禁用影子寄存器 (ARPE=0)
修改生效時機下次更新事件(UEV)時立即生效
安全性???? 無周期撕裂風險?? 可能中斷當前計數周期
典型場景實時調整PWM周期/頻率單次觸發或無需平滑切換的場景
寄存器操作修改后需等待UEV或手動觸發EGR.UG=1直接寫入即生效

關鍵場景演示(ARPE=1時修改ARR):

  1. CNT正在計數至舊ARR值(如200)

  2. 用戶寫入新ARR=300 → 存入預裝載寄存器

  3. CNT到達200 → 觸發UEV →

    • 影子寄存器加載300

    • CNT清零并按新值300重新計數
      完美避免計數中途切換導致的周期異常

通用定時器(TIM2/3/4/5)?和?高級定時器(TIM1/8)?、

一、定時器核心功能對比

功能通用定時器 (TIM2/3/4/5)高級定時器 (TIM1/8)
基礎定時? 支持? 支持
輸出比較? 4通道獨立PWM輸出? 4通道PWM +?3路互補輸出
輸入捕獲? 測量脈沖寬度/頻率? 增強型捕獲(支持正交編碼器)
斷路輸入? 不支持??緊急關斷引腳(Break Input)
重復計數器? 無??RCR(實現事件分頻)
時鐘源PCLK1 (36/72MHz)PCLK2 (72MHz)

📌?

  • F103的通用定時器掛載在APB1總線(最大72MHz),高級定時器掛載在APB2總線(72MHz)。

  • 互補輸出和斷路輸入是高級定時器用于電機控制/逆變器的關鍵安全特性。

二、高級定時器獨有功能詳解

1. 重復計數器 (RCR)
  • 作用:實現事件分頻,避免頻繁中斷。

2. 互補輸出與死區控制
  • 通道結構

    TIM1_CH1  -->  PWM主輸出  (e.g., PA8)
    TIM1_CH1N --> 互補輸出   (e.g., PB13)  // 低有效,帶死區
  • 死區發生器 (DBG)
    防止上下管(如MOSFET)同時導通造成短路,插入納秒級延遲。

3. 斷路輸入 (Break Input)
  • 緊急關斷場景:過流/過壓時,外部信號拉低→?立即關閉所有PWM輸出

  • 寄存器控制
    BDTR寄存器配置斷路極性、鎖定模式、OSSR/OSSI狀態。

三、通用定時器核心特性

1. 時基單元(與高級定時器相同)
  • 16位PSC(預分頻器) + 16位ARR(自動重裝) → 靈活定時間隔

  • 計算公式
    <code>T<sub>out</sub>?= (ARR + 1) × (PSC + 1) / TIM<sub>CLK</sub></code>
    (例:72MHz下,PSC=7199, ARR=9 → 1ms定時)

3 定時器控制LED?

軟件流程設計
初始化系統
初始化定時器和LEDIO時鐘
初始化LED的引腳IO
定時器中斷中驅動LED
Tim.c
#include "stm32f10x.h"
#include "Tim.h"void Base_Tim_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstruct;NVIC_InitTypeDef NVIC_Initstruct;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);TIM_TimeBaseInitstruct.TIM_ClockDivision=TIM_CKD_DIV1;//看心得1TIM_TimeBaseInitstruct.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstruct.TIM_Period=7200;TIM_TimeBaseInitstruct.TIM_Prescaler=10000;TIM_TimeBaseInitstruct.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitstruct);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE );TIM_Cmd( TIM2, ENABLE);NVIC_Initstruct.NVIC_IRQChannel=TIM2_IRQn ;NVIC_Initstruct.NVIC_IRQChannelPreemptionPriority=0;NVIC_Initstruct.NVIC_IRQChannelSubPriority=0;NVIC_Initstruct.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_Initstruct);}

Tim.h

#ifndef _TIM_H_
#define _TIM_H_void Base_Tim_Init(void);#endif

main.c

#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "Bear.h"
#include "key.h"
#include "relay.h"
#include "shake.h"
#include "wireless.h"
#include "exti_key.h"
#include "usart.h"
#include "stdio.h"
#include "Tim.h"void delay(uint16_t time)//延時1ms  軟件延時粗延時
{uint16_t i=0;while(time --){i=12000;while(i --);}}int  main()
{LED_Init();Base_Tim_Init();while(1){}}void TIM2_IRQHandler (void)
{if(TIM_GetITStatus(TIM2, TIM_IT_Update)!=RESET){GPIO_ResetBits(GPIOA,GPIO_Pin_1);delay(1000);GPIO_SetBits(GPIOA,GPIO_Pin_1);delay(1000);TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}}

今日心得:

1:定時器時鐘分頻(TIM_Clock_Division_CKD)詳解

在STM32定時器(TIM)中,CKD(Clock Division)用于配置輸入時鐘源的分頻系數,從而調整定時器的內部時鐘頻率。以下是核心概念的解釋:

1. 分頻宏定義的含義
宏定義值(十六進制)二進制值分頻系數作用描述
TIM_CKD_DIV10x0000001不分頻(時鐘源直接使用)
TIM_CKD_DIV20x0100012時鐘源2分頻(頻率減半)
TIM_CKD_DIV40x0200104時鐘源4分頻(頻率降為1/4)

關鍵點

  • 這些值通過位操作寫入定時器控制寄存器(TIMx_CR1)的?CKD[1:0]?位(第8-9位)。

  • 例如:0x0100(即0000 0001 0000 0000)會將第8位置1,第9位保持

總結

  • TIM_CKD_DIVx?是配置定時器時鐘源分頻的選項,直接影響定時器的基礎頻率。

  • 分頻系數1/2/4?分別對應不分頻、2分頻、4分頻,通過寄存器位?CKD[1:0]?控制。

  • 與預分頻器(PSC)協同工作,可實現更靈活的時鐘頻率調整。

通過合理配置?CKD,開發者可以優化定時器的功耗和性能,適配不同應用場景的需求。

?2:TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);作用是啥

核心作用

配置定時器(TIM)的中斷使能狀態
通過設置/清除定時器的?DIER(DMA/Interrupt Enable Register)寄存器?的特定位,控制特定定時器事件是否觸發中斷。

參數解析

參數類型說明
TIMxTIM_TypeDef*定時器實例指針(如 TIM1, TIM2 等)
TIM_ITuint16_t中斷源選擇(使用位掩碼指定要配置的中斷事件)
NewStateFunctionalState中斷狀態:ENABLE(使能)或?DISABLE(禁用)

中斷源(TIM_IT)詳解

TIM_IT?是以下宏的位掩碼組合(可多選):

中斷源宏值(十六進制)觸發事件說明
TIM_IT_Update0x0001計數器溢出/更新事件(如計數器達到自動重載值)
TIM_IT_CC10x0002通道 1 捕獲/比較事件(如輸入捕獲觸發或比較匹配)
TIM_IT_CC20x0004通道 2 捕獲/比較事件
TIM_IT_CC30x0008通道 3 捕獲/比較事件
TIM_IT_CC40x0010通道 4 捕獲/比較事件
TIM_IT_Trigger0x0040觸發事件(由從模式控制器觸發,如外部信號同步)
TIM_IT_Break0x0080斷路輸入事件(高級定時器特有,用于緊急關閉輸出)

?

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

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

相關文章

鼎捷T100程序開發:校驗程序詳解

校驗程序概述 T100系統校驗程序需要確保系統數據的準確性、完整性和一致性&#xff0c;相當于企業信息系統的"健康體檢醫生"。它通過預設規則掃描系統數據&#xff0c;識別異常和錯誤&#xff0c;確保業務運行可靠。通過持續完善的校驗機制&#xff0c;企業能夠構建數…

BaseDao 通用查詢方法設計與實現

BaseDao 通用查詢方法設計與實現 一、通用查詢方法設計思路 1. 核心查詢功能矩陣查詢類型方法名功能說明復雜度主鍵查詢findById()根據主鍵獲取單個實體?全量查詢findAll()獲取全部實體?條件查詢findByCondition()動態條件查詢???分頁查詢findPage()分頁結果集????排序…

llama.cpp gguf主要量化方法

量化是一種通過降低模型參數的表示精度來減少模型的大小和計算存儲需求的方法&#xff0c;如把單精度fp32轉化為int8來減少存儲和計算成本。 常見的是線性量化&#xff0c;公式 r S(q-Z)&#xff0c;將實數值r映射為量化的整數值q&#xff0c;其中縮放因子S和零點Z根據參數分…

汽車級MCU選型新方向:eVTOL垂槳控制監控芯片的替代選型技術分析

摘要&#xff1a;隨著eVTOL&#xff08;電動垂直起降航空器&#xff09;領域的蓬勃發展&#xff0c;對于高性能、高可靠性的垂槳控制監控芯片的需求日益迫切。本文旨在深入探討汽車級MCU&#xff08;微控制單元&#xff09;在這一新興領域的應用潛力&#xff0c;以國科安芯推出…

Deepoc具身智能大模型:送餐機器人如何學會“讀心術”

Deepoc具身智能大模型&#xff1a;送餐機器人如何學會“讀心術”深夜十點的商場火鍋店&#xff0c;一臺銀色機器人正穿越喧鬧的人群。當它感知到奔跑的兒童突然變向&#xff0c;驅動輪立即反向微調0.3度&#xff1b;托盤上的牛油鍋底因顧客推椅產生晃動&#xff0c;平衡系統瞬間…

學習設計模式《十七》——狀態模式

一、基礎概念 狀態模式的本質是【根據狀態來分離和選擇行為】。 狀態模式的定義&#xff1a;允許一個對象在其內部狀態改變時改變它的行為&#xff1b;對象看起來似乎修改了它的類。 認識狀態模式序號認識狀態模式說明1狀態和行為通常指的是對象實例的屬性的值&#xff1b;而行…

python的婚紗影樓管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 隨著婚紗…

濾波電路Multisim電路仿真實驗匯總——硬件工程師筆記

目錄 1 濾波電路基礎知識 1.1 濾波電路的分類 1.1.1 按頻率選擇性分類 1.1.2 按實現方式分類 1.2 濾波電路的設計 1.2.1 確定濾波器類型 1.2.2 計算截止頻率 1.2.3 選擇濾波階數 1.2.4 考慮元件參數 1.2.5 仿真驗證 1.3 濾波電路的應用 1.3.1 電源濾波 1.3.2 音頻…

C++隨機打亂函數:簡化源碼與原理深度剖析

文章目錄一、Fisher-Yates洗牌算法核心原理二、std::random_shuffle簡化實現與缺陷分析簡化源碼&#xff08;核心邏輯&#xff09;原理層面的致命缺陷三、std::shuffle的現代改進與實現簡化源碼&#xff08;核心邏輯&#xff09;原理層面的關鍵改進四、隨機數生成器工作原理URB…

DBeaver連接MySQL8.0報錯Public Key Retrieval is not allowed

DBeaver 鏈接本地mysql8.0服務報錯Public Key Retrieval is not allowed為什么會出現這個錯誤&#xff1f;MySQL 8.0 默認使用新的認證插件&#xff1a;caching_sha2_password某些客戶端&#xff08;比如老版本的 JDBC 驅動或配置不當的 DBeaver&#xff09;在連接時&#xff0…

SpringBoot系列—統一功能處理(攔截器)

上篇文章&#xff1a; SpringBoot系列—MyBatis-plushttps://blog.csdn.net/sniper_fandc/article/details/148979284?fromshareblogdetail&sharetypeblogdetail&sharerId148979284&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 攔…

《匯編語言:基于X86處理器》第7章 整數運算(3)

本章將介紹匯編語言最大的優勢之一:基本的二進制移位和循環移位技術。實際上&#xff0c;位操作是計算機圖形學、數據加密和硬件控制的固有部分。實現位操作的指令是功能強大的工具&#xff0c;但是高級語言只能實現其中的一部分&#xff0c;并且由于高級語言要求與平臺無關&am…

應用筆記|數字化儀在醫學SS-OCT中的應用

引言近些年來&#xff0c;OCT&#xff08;光學相干斷層掃描&#xff0c;Optical Coherence Tomography&#xff09;作為一種非破壞性3D光學成像技術逐漸在醫學眼科設備中流行起來。OCT可提供實時一維深度或二維截面或三維立體的圖像&#xff0c;分辨率可達微米&#xff08;μm&…

Ubuntu 22.04與24.04 LTS版本對比分析及2025年使用建議

Ubuntu 22.04與24.04 LTS版本對比分析及2025年使用建議 在2025年的技術環境下&#xff0c;Ubuntu 22.04和24.04 LTS各有優勢&#xff0c;選擇哪一個取決于具體應用場景和用戶需求。經過對系統內核、桌面環境、軟件生態、生命周期支持等多方面因素的綜合分析&#xff0c;本報告將…

Linux進程的生命周期:狀態定義、轉換與特殊場景

前言 在Linux系統中&#xff0c;進程是資源分配和調度的基本單位&#xff0c;而進程狀態則是理解進程行為的關鍵。從運行中的任務&#xff08;TASK_RUNNING&#xff09;到僵尸進程&#xff08;EXIT_ZOMBIE&#xff09;&#xff0c;每個狀態都反映了進程在內核調度、資源等待或父…

神經網絡簡介

大腦的基本計算單位是神經元&#xff08;neuron&#xff09;。人類的神經系統中大約有860億個神經元&#xff0c;它們被大約10^14-10^15個突觸&#xff08;synapses&#xff09;連接起來。下面圖表的左邊展示了一個生物學的神經元&#xff0c;右邊展示了一個常用的數學模型。每…

多路由協議融合與網絡服務配置實驗(電視機實驗)

多路由協議融合與網絡服務配置實驗文檔 一、實驗用途和意義 &#xff08;一&#xff09;用途 本實驗模擬企業復雜網絡環境&#xff0c;整合 OSPF、RIPv2 動態路由協議&#xff0c;結合 DHCP、FTP、Telnet 服務配置及訪問控制策略&#xff0c;實現多區域網絡互聯、服務部署與…

在指定conda 環境里安裝 jupyter 和 python kernel的方法

在 Conda 的指定環境中安裝 Jupyter 和 Python Kernel 是一個常見操作,以下是詳細步驟,確保在指定環境中正確配置 Jupyter 和 Python Kernel: 1. 準備工作 確保已安裝 Anaconda 或 Miniconda,Conda 環境管理工具可用。確認已創建或計劃使用的 Conda 環境。2. 步驟:安裝 J…

【數據結構與算法】數據結構初階:詳解順序表和鏈表(四)——單鏈表(下)

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為…

Java+AI精準廣告革命:實時推送系統實戰指南

? 廣告推送的世紀難題 用戶反感&#xff1a;72%用戶因無關廣告卸載APP 轉化率低&#xff1a;傳統推送轉化率<0.5% 資源浪費&#xff1a;40%廣告預算被無效曝光消耗 &#x1f9e0; 智能廣告系統架構 &#x1f525; 核心模塊實現&#xff08;Java 17&#xff09; 1. 實時…