MCU開發學習記錄9 - 通用定時器學習與實踐(HAL庫) -RGBLED控制、定時器輸入捕獲、主從定時器移相控制-STM32CubeMX

? ? ? ? 本文將介紹通用定時器的概念、相關函數以及STM32CubeMX生成定時器的配置函數以及對生成定時器的配置函數進行分析(包括結構體配置、相關寄存器配置)。
? ? ? ? 本文以TIM2/TIM5、TIM3/TIM4為基礎介紹通用定時器(包含通用定時器全部功能),其余的通用定時器都是功能閹割版,可自行查閱芯片的reference manual和HAL庫手冊。

????????最后針對于通用定時器實踐:使用TIM2輸出PWM控制全彩LED燈;輸入捕獲MCU開發學習記錄8 - 基本定時器學習與實踐(HAL庫)的LED燈高電平持續時間;主從定時器移相控制(利用主定時器輸出一路PWM同時作為觸發信號,從定時器輸出移相PWM波)。

0. F4系列定時器分類

  1. 最大接口時鐘(Max interface clock (MHz))
    1. 定時器與系統內核(如MCU)之間的通信接口(如APB總線)支持的最高時鐘頻率。
    2. 它決定了定時器寄存器配置和狀態讀取的速度上限。例如,如果接口時鐘為84 MHz,則對定時器寄存器的讀寫操作需基于該頻率進行,不能超過此速率。
  2. ?最大定時器時鐘(Max timer clock (MHz))
    1.?定時器內部計數器(Counter)實際運行時的最高時鐘頻率。
    2.?它決定了定時器的計數速度,直接影響定時器的計時精度和輸出信號的頻率上限。例如,168 MHz的定時器時鐘意味著計數器每秒最多遞增168,000,000次。

????????
????????

1.?什么是通用定時器?

1.1?通用定時器概念

1.1.1 通用定時器功能說明

????????STM32F4系列的通用定時器為TIM2/TIM5(32位定時器,即計數值CNT有32位)、TIM3/TIM4(16位定時器)、TIM9-TIM14(16位定時器,功能閹割版)。

  1. TIM2/TIM5、TIM3/TIM4功能相同(只有計算器位數不同):
    ·?
    遞增、遞減和遞增/遞減(雙向)的計數模式
    ·?4個獨立通道:輸入捕獲;輸出比較;PWM 生成(邊沿和中心對齊模式)、單脈沖輸出
    ·?多定時器主從互連以及外部信號控制定時器
    ·?如下事件時生成中斷/DMA 請求:
    ? ? ? ? 1.?
    更新:計數器上溢/下溢、計數器初始化(通過軟件或內部/外部觸發)
    ? ? ? ? 2. 觸發事件(計數器啟動、停止、初始化或通過內部/外部觸發計數)
    ? ? ? ? 3. 輸入捕獲
    ? ? ? ? 4. 輸出比較
    ·?增量編碼器與霍爾傳感器支持
    ·?外部時鐘模式允許定時器使用外部信號作為時鐘源,而不是內部的APB時鐘。這有兩種模式:外部引腳輸入(通過定時器的 ?外部觸發輸入引腳(TIMx_ETR)?? 接收外部脈沖信號。即外部脈沖直接驅動定時器的計數器遞增。)和外部觸發輸入(來自其他外設的觸發信號(如另一個定時器的 ?TRGO信號、ADC的轉換完成信號等))。
  2. TIM9/TIM12:
    · 只有 遞增計數模式
    · 2個獨立通道:輸入捕獲;輸出比較;PWM 生成(邊沿和中心對齊模式)、單脈沖輸出
    · 多定時器主從互連以及外部信號控制定時器
    ·?如下事件時生成中斷:
    ? ? ? ? 1.?
    更新:計數器上溢/下溢、計數器初始化(通過軟件或內部/外部觸發)
    ? ? ? ? 2. 輸入捕獲
    ? ? ? ? 3. 輸出比較
  3. TIM10、TIM11、TIM13、TIM13:
    · 只有 遞增計數模式
    · 1個獨立通道:輸入捕獲;輸出比較;PWM 生成(邊沿和中心對齊模式)、單脈沖輸出
    ·?如下事件時生成中斷:
    ? ? ? ? 1.?
    更新:計數器上溢/下溢、計數器初始化(通過軟件或內部/外部觸發)
    ? ? ? ? 2. 輸入捕獲
    ? ? ? ? 3. 輸出比較

1.1.2 通用定時器框圖

下圖為正點原子開發指南里面的通用定時器框圖,如下所示。

????????

  1. 時鐘來源選擇:
    · 內部時鐘 (CK_INT)
    · 外部時鐘模式 1 :外部輸入引腳 (TIx)
    · 外部時鐘模式 2 :外部觸發輸入 (ETR) ,僅適用于 TIM2 TIM3 TIM4
    · 內部觸發輸入 (ITRx)(定時器主從模式) :使用一個定時器作為另一個定時器的預分頻器,例如可以將定時器配置為定時器 2 的預分頻器。
  2. TIM控制器:
    復位、使能、計數、TRGO(通用觸發輸出)定時器或DAC/ADC、編碼器接口
  3. 時基單元:
    ·
    計數模式:遞增、遞減和遞增/遞減(雙向/中心對齊模式)
    ·?預分頻器寄存器 (TIMx_PSC) - 具有影子寄存器
    ·?計數器寄存器 (TIMx_CNT)
    ·?自動重載寄存器 (TIMx_ARR)- 具有影子寄存器
  4. 輸入捕獲通道:
    配置TIMx_CCER(CCnP/CCnNP)使能TIMx_CHn輸入通道,生成TInF(Timer Input n Filter)信號,通過邊沿檢測器生成對應邊沿信號TInFPx(Timer Input n Filtered and Polarity-Processed)經過預分頻器生成ICnPS(Input Capture n Prescaler)觸發對應輸入捕獲事件。
  5. 輸入捕獲/輸出比較通道共用部分:
    ·?輸入捕獲部分:

    ? 描述了輸入捕獲事件相關寄存器配置,以及讀CCRx的計數值。
    ·?輸出比較部分:
    ? 描述了輸出捕獲事件相關寄存器配置,以及寫CCRx的計數值。
  6. 輸出比較通道:
    本部分主要兩個功能:一是PWM輸出;二是做TRGO的觸發信號。

1.2?通用定時器-時鐘計數模式(三種)

TIMx_CR1.ARPE(Auto-reload preload enable) :自動重載預裝載使能
TIMx_CR1.CMS(Center-aligned mode selection):中心對齊模式選擇
TIMx_CR1.DIR(Direction):方向(遞增、遞減)
TIMx_CR1.URS((Update request source):中斷或 DMA 請求的請求源選擇
TIMx_CR1.UDIS(Update disable):使能/禁止 UEV 事件
TIMx_CR1.CEN(Counter enable):計數器使能

????????

1.2.1?通用定時器-遞增計數模式

????????

1.2.2?通用定時器-遞減計數模式

????????

1.2.3?通用定時器-中心對齊模式(遞增/遞減計數)

????????
????????????

CMS=11
????????
CMS=01(counter underflow)CMS=10(counter overflow)
????????

1.3?通用定時器時鐘源

????????

1.3.1?通用定時器時鐘源1-內部時鐘源 (CK_INT)

? ? ? ? SMS = 000(即禁止從模式控制器),CEN 位、DIR 位(TIMx_CR1 寄存器中)和UG位(TIMx_EGR 寄存器中)為實際控制位。
????????

1.3.2?通用定時器時鐘源2-外部時鐘模式 1:外部輸入引腳 (TIx)

????????SMS = 111,即計數器可在選定的輸入信號上出現上升沿或下降沿時計數。
????????
芯片參考手冊中舉例:要使遞增計數器在 TI2 輸入出現上升沿時計數,請執行以下步驟:
????????

1.3.3?通用定時器時鐘源3-外部時鐘模式 2:外部觸發輸入 (ETR)

????????

????????

芯片參考手冊中舉例:要使遞增計數器在 ETR 每出現 2 個上升沿時計數,請執行以下步驟:

????????
????????
????????

1.3.4?通用定時器時鐘源4-內部觸發輸入 (ITRx)

????????參考本文的1.6.2?定時器同步

1.3?通用定時器-輸入捕獲/輸出比較通道

1.3.1?輸入捕獲通道

下圖為正點原子開發指南注釋的輸入捕獲通道圖。
????????

工作流程:
? ? ? ? 外部信號->TIx引腳->TIxF信號->TIxFPx信號(邊沿極性信號)->ICx(輸入捕獲)->ICxPS

1.3.2 共用通道-?輸入捕獲部分

下圖為正點原子開發指南注釋的共用通道-?輸入捕獲部分圖。

????????

1.3.3?共用通道-?輸出比較部分

下圖為正點原子開發指南注釋的共用通道-?輸出比較部分圖。

????????

1.3.4?輸出比較通道

下圖為正點原子開發指南注釋的輸出比較通道圖。

????????

1.4 通用定時器輸入模式

1.4.1?輸入捕獲模式

1. 輸入捕獲模式說明:

? ? ? ? 當檢測到外部信號(如TI1引腳)的指定邊沿(上升沿/下降沿)?時,將當前計數器值鎖存到捕獲寄存器(TIMx_CCRx)中。
????????通過中斷或DMA通知系統讀取捕獲值,用于計算信號頻率、脈寬等參數。

2. 關鍵寄存器:

  • ?輸入通道(TI1/TI2等)??:外部信號輸入引腳。

  • ?輸入濾波(ICxF)??:消除信號抖動。

  • ?邊沿檢測(CCxP/CCxNP)??:選擇觸發邊沿(上升沿/下降沿)。

  • ?捕獲寄存器(TIMx_CCRx)??:存儲捕獲時的計數器值。

  • ?中斷/DMA標志(CCxIF/CCxOF)??:通知系統捕獲完成。

3. 具體流程:

  1. 選擇有效輸入通道(映射TI1到CCR1)
    ·?
    TIMx_CCMR1.?CC1S[1:0] - 01(輸入模式)
    · (輸入模式,即TIMx_CCMR1.?CC1S[1:0]不等于0)使TIMx_CCR1變為只讀模式

  2. 配置輸入濾波(消除信號抖動)?
    ·?TIMx_CR1.?CKD[1:0] - 設置 tDTS數字濾波器采樣時鐘
    ·?TIMx_CCMR1.?IC1F[3:0] - 設置可定義 TI1 輸入的采樣頻率和適用于 TI1 的數字濾波器帶寬。數字濾波器由事件計數器組成,每 N 個事件才視為一個有效邊沿:

  3. 選擇有效觸發邊沿?
    ·?
    TIMx_CCER.CCxP - 0 上升沿、1 下降沿
    ·?TIMx_CCER.CCxNP - 雙邊沿觸發

  4. 配置輸入預分頻器(禁止預分頻)
    ·?TIMx_CCMR1.IC1PS[1:0] - 設置00,禁止預分頻器,即每次檢測到有效邊沿均觸發捕獲。?

  5. 使能捕獲功能
    ·?
    TIMx_CCER.CC1E - 1:允許計算器的值捕獲到捕獲寄存器中。

  6. 使能中斷/DMA請求
    ·?
    TIMx_DIER.CC1IE - 1:使能捕獲完成中斷
    ·?TIMx_DIER.CC1DE - 1:使能DMA請求(需配合DMA控制器初始化)。

4. 捕獲事件處理流程:

  1. 跳變沿檢測?
    TI1輸入信號經過濾波和邊沿檢測后,確認有效上升沿。

  2. ?計數器值鎖存
    ?·????計數器值立即寫入TIMx_CCR1寄存器。

  3. 標志位更新
    ·????CC1IF標志(TIMx_SR寄存器)?? 置1,表示捕獲完成。
    ·????若中斷已使能(CC1IE=1),觸發中斷服務程序(ISR)。
    ·????若DMA已使能(CC1DE=1),觸發DMA傳輸。

  4. 重復捕獲處理
    ·?
    ???未及時讀取TIMx_CCR1或清除CC1IF標志,下次捕獲時CC1OF標志(溢出標志)置1,提示數據覆蓋風險。

  5. 標志位清除
    ·?
    ?TIMx_SR.?CC1IF:軟件寫0 或 讀取TIMx_CCR1寄存器。
    ·??TIMx_SR.?CC1OF:軟件寫0。

注:TIMx_EGR.CC1G置1,可生成IC中斷和DMA請求。

1.4.2?PWM輸入模式

1. PWM輸入模式說明:

????????一個外部引腳(TI1)即可同時捕獲PWM信號的周期(Period)?和占空比(Duty Cycle)?。
?????????IC1通道?:捕獲PWM信號的上升沿,記錄周期值(TIMx_CCR1)。
?????????IC2通道?:捕獲PWM信號的下降沿,記錄占空比(TIMx_CCR2)。
????????計數器復位?:每次捕獲上升沿時,觸發從模式控制器復位計數器(TIMx_CNT),確保周期測量準確性。

2. 具體流程:

  1. 配置IC1通道(捕獲上升沿,測量周期)?
    ·?
    TIMx_CCMR1.CC1S[1:0]? -?01,將IC1映射到 ?TI1輸入?(即PWM信號輸入引腳)。
    ·?TIMx_CCER.CC1P/CC1NP - 00,選擇上升沿觸發。

  2. 配置IC2通道(捕獲下降沿,測量占空比)?
    ·?
    TIMx_CCMR1.CC2S[1:0] - 10,將IC2也映射到 ?TI1輸入?(同一引腳)。
    ·?TIMx_CCER.CC1P/CC1NP - 10,選擇上升沿觸發。

  3. 配置從模式控制器(復位模式)?
    ·?
    TIMx_SMCR.TS[2:0] -?101,選擇觸發源為 ?TI1FP1?(即IC1的濾波后信號)。
    ·?TIMx_SMCR.SMS[2:0] -100,使能從模式為復位模式(上升沿復位計數器)。

  4. 使能捕獲功能
    ·?TIMx_CCER.CC1??????E/CC2E都寫入 1,允許捕獲到TIMx_CCR1和TIMx_CCR2。

????????

1.5 通用定時器輸出模式

1.5.1?強制輸出模式

1. 強制輸出模式說明:

????????強制輸出模式允許軟件直接控制定時器的輸出比較信號(OCxREF和OCx引腳電平),?繞過計數器與比較寄存器的比較邏輯,強制設定輸出狀態。強制輸出時,計數器與影子寄存器的比較仍正常執行,可觸發中斷或DMA請求。

2. 具體流程:

  1. 配置通道為輸出模式
    ·?TIMx_CCMRx.CCXS[1:0] - 00,選擇通道為輸出模式?(默認模式)。

  2. 強制設置輸出電平
    ·?TIMx_CCMRx.OCxM[2:0] - 100:強制OCxREF為無效電平;101:強制OCxREF有效電平。

  3. 配置輸出極性(CCxP位)?
    ·?TIMx_CCER.?CCxP - 0:高電平有效;1:低電平有效

  4. 中斷/DMA觸發邏輯?:
    若計數器與比較寄存器匹配,?CCxIF標志(TIMx_SR)?? 置1,觸發中斷或DMA請求。

1.5.2?輸出比較模式

1. 輸出比較模式說明:

????????輸出比較模式(特別是 ?翻轉模式)允許定時器在計數器(TIMx_CNT)與捕獲/比較寄存器(TIMx_CCRx)匹配時,自動翻轉輸出引腳(OCx)的電平。

2. 關鍵寄存器:

  • 輸出模式(OCxM)??:定義匹配時的輸出行為(如翻轉、置高、置低)。
  • ?輸出極性(CCxP)??:控制輸出引腳是否反相。
  • ?預裝載寄存器(OCxPE)??:決定是否啟用影子寄存器(緩沖寫入的TIMx_CCRx值)。

3. 具體流程:

  1. ?選擇計數器時鐘(設置PSC)?:

  2. 寫入TIMx_ARR和TIMx_CCRx?:

  3. ?使能中斷/DMA請求:
    ·??CCxIE位?(中斷使能):置1時,匹配事件觸發中斷。
    ?·?CCxDE位?(DMA使能):置1時,匹配事件觸發DMA請求。?

  4. ?選擇輸出模式(翻轉模式)??:
    ·??OCxM=011?:選擇翻轉模式(匹配時翻轉輸出電平)。
    ·??OCxPE=0?:禁用預裝載寄存器(直接寫入TIMx_CCRx生效)。
    ?·??CCxP=0?:輸出極性為不反相(OCxREF與OCx引腳電平一致)。
    ?·??CCxE=1?:使能輸出引腳。

  5. 啟動計數器?:
    TIMx_CR1.CEN 置1,啟動計數器。

????????

1.5.3 PWM輸出模式

1. PWM輸出模式說明:

????????PWM模式通過定時器的 ?自動重載寄存器(TIMx_ARR)?? 和 ?捕獲/比較寄存器(TIMx_CCRx)?? 生成頻率和占空比可調的脈沖信號。
????????

2. 具體流程:

  1. 選擇PWM模式(模式1或模式2)
    TIMx_CCMRx 寄存器的 ?OCxM[2:0]位? 寫入:
    ?·??PWM模式1?:110(有效電平在計數器 < CCRx 時保持,否則無效)。
    ?·??PWM模式2?:111(有效電平在計數器 > CCRx 時保持,否則無效)。

  2. 使能預裝載寄存器
    ?·??
    使能捕獲/比較預裝載(TIMx_CCRx):TIMx_CCMRx.OCxPE = 1。
    ?·??使能自動重載預裝載(TIMx_ARR):TIMx_CR1.ARPE = 1。

  3. 初始化寄存器(生成更新事件)
    ?·??TIMx_EGR
    寄存器的 ?UG位? 寫入 1,手動生成更新事件。

  4. 配置輸出極性
    ?·??
    TIMx_CCER 寄存器的 ?CCxP位? 寫入:0:高電平有效;1:低電平有效

  5. 使能輸出引腳
    ?·?TIMx_CCER 寄存器的 ?CCxE位? 寫入 1,使能OCx引腳輸出。

  6. 設置自動重載值(ARR)和比較值(CCRx)
    ?·?
    TIMx_ARR、?TIMx_CCRx

  7. 啟動計數器
    ?·?
    TIMx_CR1.?CEN寫入 1,啟動計數器。

  8. PWM信號生成邏輯
    ?·?PWM.CMS?中心對齊模式選擇
    ?·?PWM.DIR 計算器方向(PWM.CMS[1:0] - 00

? ? ? ? CCIF是捕獲/比較中斷標志位

????????

????????
????????

3. 注意:

????????

1.6?定時器的外部觸發同步

TIMx 定時器以下列模式與外部觸發實現同步:復位模式、門控模式和觸發模式。

1.6.1?從模式-復位模式SMS=100

????????復位模式(Reset Mode)是STM32定時器的一種從模式,?通過外部信號(如TI1上升沿)復位計數器(TIMx_CNT)?,并可選生成更新事件(UEV)以刷新預裝載寄存器。

  • 外部觸發復位?:當檢測到指定觸發信號(如TI1上升沿)時,立即復位計數器(TIMx_CNT=0)。
  • ?更新事件(UEV)生成?:若 TIMx_CR1.URS=0,復位時會觸發UEV事件,更新預裝載寄存器(TIMx_ARR和TIMx_CCRx)。
  • ?中斷/DMA觸發?:復位事件可觸發中斷或DMA請求,用于同步其他操作。

????????

1.6.2?從模式-門控模式SMS=101

????????門控模式是一種通過 ?外部輸入信號電平(如TI1)控制計數器啟停? 的定時器操作模式,適用于需要根據外部設備狀態動態控制計數的場景(如啟動/暫停測量、外部同步控制等)。

  • ?電平觸發啟停?:根據外部信號(如TI1)的電平高低,控制計數器的運行(低電平啟動計數,高電平停止計數)。
  • ?中斷觸發?:計數器啟動或停止時,TIF 標志(TIMx_SR 寄存器)置1,可觸發中斷或DMA請求。
  • ?同步延遲處理?:輸入信號(TI1)需經過同步電路,避免亞穩態影響計數精度。

????????

1.6.3?從模式-觸發模式SMS=110

  • 外部觸發啟動計數器?:當檢測到指定輸入信號(例如TI2上升沿)時,啟動計數器根據內部時鐘開始遞增。
  • ?中斷標志置位?:觸發事件發生時,TIF 標志(TIMx_SR 寄存器)置1,可用于中斷或DMA通知。
  • ?同步延遲處理?:外部輸入信號(TI2)需經過同步電路,導致觸發信號與實際計數器啟動之間存在1-2個時鐘周期的延遲。

????????

1.6.4?從模式-外部時鐘模式 2 +觸發模式SMS=110

????????外部時鐘模式2(ETR作為時鐘源)?? 和 ?觸發模式(TI11上升沿啟動計數器)?,實現由外部觸發信號控制計數器在外部時鐘驅動下精準計數。

  • ?外部時鐘源?:ETR引腳作為計數器的時鐘源(每個上升沿觸發計數)。
  • ?觸發啟動?:TI11的上升沿作為觸發信號,啟動計數器(CEN=1)。
  • ?同步延遲處理?:ETR信號需通過同步電路,導致計數器實際遞增延遲1-2個時鐘周期。

????????

1.7 定時器同步

?????????定時器同步? 允許通過主從模式配置,將多個定時器級聯或協同工作,實現復雜的時序控制、頻率擴展及多外設同步。

通用定時器內部連接表和定時器同步內部結構連接圖
????????
????????

????????

1.7.1?一個定時器用作另一個定時器的預分頻器(外部時鐘模式)

????????TIM1配置為主定時器TIM2配置為從定時器,從而實現 ?TIM1作為TIM2的預分頻器。即利用 ?TIM1的更新事件(UEV)?? 作為 ?TIM2的外部時鐘源,使TIM2的計數速率由TIM1的溢出頻率控制。?

  • ?TIM1?:作為預分頻器,通過ARR值設定觸發周期。
  • ?TIM2?:在TIM1的每次溢出時遞增,擴展整體計數范圍或降低時鐘頻率。

配置流程:

  1. 配置TIM1為主定時器
    ?·?
    設置主模式(MMS=010)?:TIM1_CR2 寄存器的 ?MMS[2:0]位? 寫入 010,選擇 ?更新事件(UEV)?? 作為觸發輸出(TRGO)。
    ?·?設定TIM1的周期(ARR值)
    ?·?使能TIM1計數器:TIM1_CR1 寄存器的 ?CEN位? 寫入 1,啟動TIM1計數。

  2. 配置TIM2為從定時器
    ?·?選擇觸發源(TS=000):TIM2_SMCR 寄存器的 ?TS[2:0]位? 寫入 000,選擇 ?內部觸發源0(ITR0)?,即TIM1的TRGO信號。
    ?·?設置外部時鐘模式(SMS=111)?:TIM2_SMCR 寄存器的 ?SMS[2:0]位? 寫入 111,選擇 ?外部時鐘模式1
    ?·?使能TIM2計數器:TIM2_CR1 寄存器的 ?CEN位? 寫入 1,啟動TIM2計數。

1.7.2?使一個定時器使能另一個定時器(門控模式,OC1REF為觸發源)

1. 功能介紹:

通過 ?定時器1的OC1REF信號? 作為門控信號,控制 ?定時器2的計數啟停

  • ?OC1REF高電平?:定時器2根據分頻后的時鐘計數。
  • ?OC1REF低電平?:定時器2停止計數,保持當前值。
  • ?應用場景?:測量外部信號高電平持續時間、節能模式下的間歇計數。

2. 配置流程:

1.? 定時器1配置(主模式,生成OC1REF波形)??

  1. ?主模式設置:TIM1_CR2.MMS[2:0]=100。將定時器1的 ?OC1REF信號? 作為觸發輸出(TRGO),用于控制定時器2。

  2. ?輸出比較配置(PWM模式):?TIM1_CCMR1.OC1M[2:0]=110(PWM模式1)。

    TIM1_CCR1=0x80:占空比50%(高電平占128個時鐘)。
    TIM1_ARR=0xFF:定義PWM周期為256個時鐘。
  3. ?時鐘分頻:?TIM1_PSC=2(3分頻,實際時鐘頻率為 f_CK_CNT=f_CK_INT/3)。

  4. ?啟動定時器1:?TIM1_CR1.CEN=1

?2. 定時器2配置(從模式,門控控制)??

  1. ?觸發源選擇:TIM2_SMCR.TS[2:0]=000(選擇 ?ITR0,即TIM1的TRGO信號)。

  2. ?門控模式使能:TIM2_SMCR.SMS[2:0]=101。定時器2的計數器僅在OC1REF高電平時遞增。

  3. ?時鐘分頻與啟動?

    • ?預分頻器?:TIM2_PSC=2(3分頻)。

    • ?啟動定時器2?:TIM2_CR1.CEN=1(實際計數受OC1REF電平控制)。

?3. 初始化注意事項?

  • ?計數器未初始化?:

    • 若未復位,定時器2從當前值開始計數(示例中從0x3045開始)。

  • ?強制復位方法?:

    • 寫入 TIMx_EGR.UG=1,復位計數器(如啟動前寫入 TIM2_CNT=0)。

????????

????????

1.7.3?使一個定時器使能另一個定時器(門控模式,CNT_EN為觸發源)

1. 功能介紹:

通過 ?定時器1的使能信號(CEN)?? 控制 ?定時器2的啟停,實現主從定時器的同步。

  • ?主定時器1啟動(CEN=1)??:定時器2開始計數。
  • ?主定時器1停止(CEN=0)??:定時器2停止計數。
  • ?應用場景?:多設備同步啟停、精確控制計數窗口。

2. 配置流程:

????????

1.7.4?使用一個定時器啟動另一個定時器(觸發模式)

????????利用定時器1的更新事件(UEV)作為觸發信號,自動啟動 ?定時器2的計數器(CEN=1)?,并控制其計數周期。
????????? ?主模式(TIM1)??:生成更新事件作為觸發信號(TRGO)。
????????? ?從模式(TIM2)??:配置為觸發模式(Trigger Mode),收到觸發信號后自動啟動計數。
????????和1.7.3相比,需要更改的是TIM2_SMCR 寄存器的 ?SMS[2:0]位? 寫入 110,選擇?觸發模式

????????

2. 基于HAL庫通用定時器實踐

2.0 通用定時器寄存器與相關函數

2.0.1?通用定時器寄存器-寄存器基地址

????????

2.0.2?通用定時器寄存器-寄存器

????????
????????

2.1 RGB LED燈(三路PWM波)

2.1.1?RGB LED燈工作原理

????????LED RGB 140C05 通過PWM 信號?調節紅(R)、綠(G)、藍(B)三個通道的亮度,實現顏色混合。(使用PWM2 :CNT小于CCRx,為無效電平(設置高電平為有效電平))
????????

2.1.2 CubeMX配置通用定時器外設

2.1.3 通用定時器外設初始化流程

2.1.4 RGB_LED實踐代碼


2.1.5 RGB_LED實踐效果

2.2 輸入捕獲變化的高電平

2.2.1 CubeMX配置通用定時器外設

????????

2.2.2 通用定時器外設初始化流程

????????

????????

2.2.3 輸入捕獲實踐代碼

? ? ? ? 在正點原子輸入捕獲實驗進行修改

2.2.4 輸入捕獲實踐效果

????????

2.3?主從定時器移相控制

2.3.1 CubeMX配置通用定時器外設(TIM3-TRGO觸發TIM9)

????????
????????

2.3.2 通用定時器外設初始化流程

????????

????????
????????

2.3.3 輸入捕獲實踐代碼

????????

2.3.4 輸入捕獲實踐效果

通過調整TIM3-CH1的ARR即可實現任意移相。

????????

3.?本文的工程文件下載鏈接

工程Github下載鏈接:https://github.com/chipdynkid/MCU-DL-STM32
(國內)工程Gitcode下載鏈接https://gitcode.com/chipdynkid/MCU-DL-STM32

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

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

相關文章

Java學習手冊:TCP 協議基礎

一、TCP 協議概述 TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議&#xff0c;它在 IP 協議的基礎上提供了可靠的 數據傳輸服務。TCP 通過三次握手建立連接&#xff0c;通過四次揮手…

刪除排序數組中的重復項--LeetCode

題目 給你一個非嚴格遞增排列的數組 nums &#xff0c;請你原地刪除重復出現的元素&#xff0c;使每個元素 只出現一次 &#xff0c;返回刪除后數組的新長度。元素的 相對順序 應該保持 一致 。然后返回 nums 中唯一元素的個數。 考慮 nums 的唯一元素的數量為 k &#xff0c…

【Elasticsearch】入門篇

Elasticsearch 入門 前言 官方地址&#xff1a;Elastic — 搜索 AI 公司 | Elastic ES 下載地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 文檔&#xff1a;什么是 Elasticsearch&#xff1f;|Elasticsearch 指南 簡介 Elasticsearch 是一個分布式、…

2024新版仿藍奏云網盤源碼,已修復已知BUG,樣式風格美化,可正常運營生產

說起網盤源碼&#xff0c;網絡上出現的也很多&#xff0c;不過可真正正能夠用于運營的少之又少。今天將的藍奏云網盤源碼&#xff0c;其實網絡上也有&#xff0c;不過是殘缺版&#xff0c;bug很多。我今天分享的仿藍奏云模板是經過長時間測試修復后的源碼&#xff0c;源碼實測可…

機器人結構認知與安裝

機器人結構認知與安裝 1. ES機器人系統結構與硬件組成 核心組件&#xff1a; OPPO ES5機器人系統由機器人本體、控制手柄、48V電源和OPPO Studio終端構成。一體化底座&#xff1a;包含控制主板、安全接口板、監測保護電路單元&#xff0c;支持外接急停開關&#xff0c;采用光耦…

sass 變量

基本使用 如果分配給變量的值后面添加了 !default 標志 &#xff0c;這意味著該變量如果已經賦值&#xff0c;那么它不會被重新賦值&#xff0c;但是&#xff0c;如果它尚未賦值&#xff0c;那么它會被賦予新的給定值。 如果在此之前變量已經賦值&#xff0c;那就不使用默認值…

python自動化測試1——鼠標移動偏移與移動偏移時間

python對自動化測試運維提供了一個簡易的庫—pyautogui&#xff0c;我們可以借助這個庫進行開發。 import pyautogui as pp.moveTo(100,100,3) 這里將鼠標光標移動到100&#xff0c;100處&#xff0c;并且用時3秒移動 鼠標移動是以固定坐標為單位&#xff0c;鼠標偏移則是在…

LX4-數據手冊相關

數據手冊相關 一 如何獲取數據手冊 ST官網&#xff1a;www.st.com 中文社區網&#xff1a; https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘寶的商品詳情頁 二 如何閱讀數據手冊 芯片手冊 定義&#xff1a;由芯片制造商提供&#xff0c;詳細…

如何使用 uv 構建 Python 包并本地安裝

本文將逐步指導你創建一個簡單的 Python 包&#xff0c;并將其本地安裝到機器或云環境中。完成本教程后&#xff0c;你將擁有一個可復用的 Python 庫&#xff0c;可直接通過 pip 安裝或在項目中導入使用。 步驟詳解 Step 0: 選擇構建工具 - 使用 uv 推薦理由&#xff1a;uv 是…

Linux之安裝配置Nginx

Linux系統下安裝配置Nginx的詳細步驟如下&#xff1a; 一、準備工作 系統環境&#xff1a;確保Linux系統已安裝&#xff0c;并且具有網絡連接&#xff08;以便在線安裝依賴或下載Nginx&#xff09;。 安裝依賴&#xff1a;Nginx依賴于一些開發庫和工具&#xff0c;如gcc、pcr…

計算機視覺cv入門之答題卡自動批閱

前邊我們已經講解了使用cv2進行圖像預處理與邊緣檢測等方面的知識&#xff0c;這里我們以答題卡自動批閱這一案例來實操一下。 大致思路 答題卡自動批閱的大致流程可以分為這五步&#xff1a;圖像預處理-尋找考試信息區域與涂卡區域-考生信息區域OCR識別-涂卡區域填涂答案判斷…

語音合成之一TTS技術發展史綜述

TTS技術發展史綜述 引言TTS技術的起源與早期探索基于規則的TTS系統&#xff1a;原理與發展共振峰合成技術&#xff1a;作用與影響拼接合成技術&#xff1a;發展與應用統計參數語音合成&#xff1a;以隱馬爾可夫模型&#xff08;HMM&#xff09;為例深度學習驅動的TTS&#xff1…

目標檢測中的損失函數(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

&#x1f680;該系列將會持續整理和更新BBR相關的問題&#xff0c;如有錯誤和不足懇請大家指正&#xff0c;歡迎討論&#xff01;&#xff01;&#xff01; &#x1f4e6;目標檢測的損失函數一般包含三個部分&#xff0c;分別是邊界框損失也可稱為定位損失、置信度損失和分類損…

結構型模式:適配器模式

什么是適配器模式&#xff1f; 適配器模式&#xff08;Adapter Pattern&#xff09;是一種常用的結構型設計模式&#xff0c;它的主要作用是將一個類的接口轉換成客戶端期望的另一個接口。就像現實生活中的各種轉接頭一樣&#xff0c;適配器模式使得原本因接口不兼容而無法一起…

AI Agent認知框架(ReAct、函數調用、計劃與執行、自問自答、批判修正、思維鏈、思維樹詳解和對比,最后表格整理總結

以下是主流AI Agent認知框架的詳細說明、對比及表格總結&#xff1a; 1. 各認知框架詳解 (1) ReAct (Reasoning Action) 定義&#xff1a;結合推理&#xff08;Reasoning&#xff09;和行動&#xff08;Action&#xff09;的循環過程。核心機制&#xff1a; 模型先推理&…

特征存儲的好處:特征存儲在機器學習開發中的優勢

隨著企業尋求提升機器學習生產力和運營能力 (MLOps),特征存儲 (Feature Store) 的普及度正在迅速提升。隨著 MLOps 技術的進步,特征存儲正成為機器學習基礎設施的重要組成部分,幫助企業提升模型的性能和解釋能力,并加速新模型與生產環境的集成。這些存儲充當集中式存儲庫,…

SPRING-AI 官方事例

springAI 關于最近看了很多SpringAi&#xff0c;閱讀很多代碼都感覺特別陌生 SpringAI依賴的springBoot版本都是3.3以上, 以及很多SpringAi都是依賴JDK版本最低17, 并且出現了很多新關鍵字例如 var,record 等寫法, 煙花繚亂得lambda 表達式&#xff0c; 到處都是使用build 構…

Visual Studio Code 使用tab鍵往左和往右縮進內容

使用VSCode寫東西&#xff0c;經常遇到多行內容同時縮進的情況&#xff0c;今天寫文檔的時候就碰到&#xff0c;記錄下來&#xff1a; 往右縮進 選中多行內容&#xff0c;點tab鍵&#xff0c;會整體往右縮進&#xff1a; 往左縮進 選中多行內容&#xff0c;按shifttab&am…

機器學習(7)——K均值聚類

文章目錄 1. K均值&#xff08;K-means&#xff09;聚類是什么算法&#xff1f;2. 核心思想2. 數學目標3. 算法步驟3.1. 選擇K個初始質心&#xff1a;3.2.迭代優化3.3. 重復步驟2和步驟3&#xff1a; 4. 關鍵參數5. 優缺點6. 改進變種7. K值選擇方法8. Python示例9. 應用場景10…

爬蟲案例-爬取某企數據

文章目錄 1、準備要爬取企業名稱數據表2、爬取代碼3、查看效果 1、準備要爬取企業名稱數據表 企業名稱紹興市袍江王新國家庭農場紹興市鄭杜糧油專業合作社紹興市越城區興華家庭農場紹興市越城區銳意家庭農場紹興市越城區青甸畈家庭農場紹興市袍江王新國家庭農場紹興市袍江月明…