清除所有定時器 對於MCU來說,定時器太重要了!

2021-10-12 09:18:39 字數 3205 閱讀 4288

對於mcu來說,定時器是必備的乙個模組,原因在於定時器是使用頻率最高。

寫在前面

這個資料總共有186頁。內容比較多,但講述的比較全面。

資料的主要內容

• stm32定時器概述

• 定時器時基單元

• 定時器輸入捕捉功能

• 定時器比較輸出功能

• 定時器觸發同步與級聯

• 定時器dma批量傳送

• 定時器產生的觸發輸出與其它外設的關聯

• stm32f334/stm32f7/stm32l4等新增的定時器功能

• 案例分享【穿插在上述內容中】

stm32定時器分類

整體講, stm32家族的定時器眾多,按照核內、核外標準大致分為兩部分:

核內定時器 + 外設定時器

• 核內定時器 : systick

• 外設定時器: 特定應用定時器+常規定時器

• 特定應用定時器: lptim;rtc;wtd;hrtim

• 常規定時器: 基本定時器、通用定時器、高階定時器 【本篇介紹重點】

按計數器位寬來分

• 16位定時器

• 32位定時器 【tim2 tim5】

• 24位定時器 【systick】

常規定時器

1.基本定時器:幾乎沒有任何對外輸入/輸出,常用作時基,實現基本的計數、定時功能。

2.通用定時器:除了基本定時器的時基功能外,還可對外做輸入捕捉、輸出比較以及連線其它感測器介面【編碼器和霍爾感測器】 。

3.高階定時器: 此類定時器的功能最為強大,除了具備通用定時器的功能外,還包含一些與電機控制和數字電源應用相關的功能,比方帶死區控制的互補訊號輸出、緊急剎車關斷輸入控制。

stm32定時器模組

stm32【通用或高階】 定時器大致分為六個功能單元

• 從模式控制單元:負責時鐘源、觸發訊號源的選擇;控制計數器的啟停、復位、門控等;

• 時基單元:定時器核心單元。負責時鐘源的分頻、計數、溢位重灌等。

• 輸入單元:為部分的時鐘訊號、 捕捉訊號、 觸發訊號提供訊號源。

• 比較輸出單元:通過對比較暫存器與計數器的數值匹配比較,實現不同輸出波形。

• 觸發輸出單元:輸出觸發訊號給到其它定時器或外設。

• 捕捉比較單元: 是輸入捕捉或比較輸出的公共執行單元。

從訊號鏈角度大體了解stm32定時器:

stm32定時器中存在著幾種基本的訊號:輸入訊號、 時鐘訊號、 觸發輸入訊號、 觸發輸出訊號,它們之間相互關聯形成相應的訊號鏈,從而衍生出各種定時器的功能。

stm32定時器功能彙總

1、 六類功能單元

【時基、從模式控制、輸入、輸出、捕捉比較、觸發輸出】

2、 四類訊號

【時鐘訊號、外部輸入訊號、觸發輸入訊號、觸發輸出訊號】

3、 四類事件

【更新事件、捕捉、 比較事件、觸發事件】

4、一大特性

【影子暫存器的預裝載特性】

這上面的一些內容掌握了,對定時器基本就沒多大問題了,資料中也有詳細說明。

案例:定時器一使能就進中斷的問題

問題描述: timer初始化階段, 經常有人反饋一使能更新中斷就就進中斷服務程式?給開發帶來些困擾,原因可能是什麼?如何解決?

因為在定時器的初始化**裡有軟體更新操作觸發了更新事件,並置位了更新中斷標誌,當使能更新中斷時就立刻進入更新中斷服務程式。

在stm32標準庫里的tim_timebaseinit( )函式裡都有這句**:

timx->egr = tim_pscreloadmode_immediate;

• 在cube庫里的hal_tim_base_init( )函式裡的 函式有這句**:

timx->egr = tim_egr_ug;

顯然,這兩行**使用到了前面提到的軟體更新操作,觸發了更新事件,置位更新中斷標誌。所以我們在使能定時器更新中斷之前,可以先做更新中斷標誌的清除操作。

時鐘源問題思考

1、幾種時鐘源?來自何處?

2、來自ti1fp1與tif_ed訊號差別是什麼?

3、來自ti1/ti2的時鐘是否可以直接像內部時鐘一樣被計數器用來計數?

4、根據時鐘源的介紹,你了解到了幾種觸發輸入訊號?

5、ti3fp4可以作為通道2的輸入捕捉訊號嗎?

6、ti4fp4可以作為觸發訊號嗎?

好了,篇幅有限,就寫到這裡。這個資料的內容我基本都看了一遍,可以結合《參考手冊》一起學習,有部分內容來自《參考手冊》。

推薦閱讀:

1.adc,dma,多路,單次/連續轉換

2.stm32中斷,及freertos中斷優先順序配置

1.hi,嵌入式工程師們,據說2023年會是linux年!

2.你眼裡的嵌入式工程師應該是啥樣的?

3.mips cpu架構宣布開源,risc-v使命完成了?

4.mcu選8位還是32位?這可不是扔鋼鏰的事!

5.讓自己更值錢,電子工程師可以這麼做!

6.不是嵌入式坑了你,而是你坑了嵌入式

簡單說說定時器

1.概念 定時器 間隔一定的時間,執行一些事 比如,半個小時 就要喝杯水 看乙個小時書就要玩會手機.應用 每間隔30毫秒向左移動10畫素,重複不斷,形成滑動的效果 2.方法 設乙個定時器 setinterval fn t fn 執行的函式 t 間隔時間 單位 毫秒 清除定時器 clearinterv...

Vue清除所有JS定時器

vue清除所有js定時器 在webpack vue 的專案中如何在頁面跳轉的時候清除所有的定時器 js定時器會有乙個返回值 數字 通過這個返回值我們可以找到這個定時器 在vue專案中可以使用路由守衛的 beforeeach方法,來進行清除功能 首先,宣告乙個全域性變數陣列,把所有的定時器的返回值放到...

清除多個定時器

文章目錄 1.定義全域性變數,通過js遍歷清除 2.暴力清除方式 js清除未知定時器的方法 在需要有實時性更新資料的專案中,我們經常會用到很多定時器,我們可能需要乙個可以一次性清除所有定時器的方法,並且不通過指定id乙個乙個去清除,以下提供兩種解決方案 回目錄1.定義全域性變數,通過js遍歷清除 這...