對於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遍歷清除 這...