STM32CubeMX實戰教程: TIM6、TIM7 - 基本定時器

目錄

一、基本定時器的作用

二、常用型號的TIM時鐘頻率

三、CubeMX配置

四、編寫執行代碼


一、基本定時器的作用

基本定時器,主要用于實現定時和計數功能。作用包括:

  1. 定時功能:可以產生周期性的中斷,用于實現定時任務。例如,可以設置一個定時器每隔一定時間(如1秒)產生一次中斷,用于執行周期性的任務,如數據采集、系統心跳等。

  2. 計數功能:基本定時器可以對外部事件進行計數,如脈沖計數。這在測量頻率、周期或者進行簡單的事件計數時非常有用。

  3. 驅動數模轉換器(DAC):可用于驅動DAC,以產生精確的模擬信號。

  4. 產生時基:基本定時器可以為系統提供時基,用于其他外設的同步操作。

  5. 中斷服務:通過配置基本定時器,可以在特定的時間點觸發中斷服務程序,執行特定的處理邏輯。

基本定時器結構簡單,易于理解和使用。在STM32系列中,基本定時器(如TIM6和TIM7)是16位的向上計數定時器,它們只能向上計數,沒有外部輸入/輸出通道,但可以用于簡單的定時任務。通用定時器(如TIM2、TIM3、TIM4)和高級定時器(如TIM1和TIM8)則提供了更多的功能和靈活性。


二、常用型號的TIM時鐘頻率

????????1.?常用的STM32F103C8,?是不帶TIM6、TIM7的,?F103系列要RC起,才帶基本定時器。

????????2.?F103系列:所有 TIM 的時鐘頻率都是72MHz;?

? ? ? ? 3. F407系列:TIM1、8、9、10、11的時鐘頻率是168MHz,其它TIM的時鐘頻率是84MHz.


三、CubeMX配置

????????通過CubeMX對基本定時器進行配置,過程相當簡單。

? ? ? ? 只需配置3個重要參數:PSC、ARR、打開中斷。

????????下面以“TIM6+每隔1秒執行LED閃爍”展開講解,TIM7的操作是一致,只是名稱不同。

????????1、配置參數

參數講解:

? ? ? ? ①?Prescaler(分頻系數):即PSC寄存器值,用于控制每一脈沖的時間。如STM32F407的TIM6,按上文內容得知,時鐘是84M。在設置預分頻為84后,脈沖頻率:84M/84=1MHz,即每秒產生1百萬個脈沖信號,1秒/1M=1us,? 即每1us產生一次脈沖信號。

? ? ? ? ② Counter?Mode (計數方式):? 向上計數

? ? ? ? ③?Counter Period (計數周期):? 即ARR寄存器值,多少個脈沖作為1個波形周期。

? ? ? ? ④?auto-reload preload (自動重載值的預裝載):? 當改變周期值ARR時,是否等到下一個更新事件再寫入數值,使得數值的更改不影響執行中的波形。

2、打開中斷

?基本定時器,只有一種中斷,按下圖,打勾即可。

注意:打勾中斷后,生成的代碼,只是幫我們添加了中斷的配置; 而中斷的開啟,需要使用代碼“手動”開啟。


四、編寫執行代碼

代碼共為3部分:初始化配置、開啟TIM、中斷回調函數。

1、初始化配置

CubeMX根據我們的配置,已生成好了初始化代碼,我們不用管它。

如果想查看它的初始化實現過程,可以雙擊 "tim.c"。

2、開啟TIM

謹記一個,當我們使用CubeMX配置外設功能時,它只是根據參數的配置生成初始化代碼(即上面的第1步),而不會主動開啟外設功能,特別是中斷的開啟,如TIM、ADC、UART等。

所以,我們需要在main.c中,“手動”開啟TIM6。

如下圖,在while前,添加:

HAL_TIM_Base_Start_IT(&htim6);?

調用HAL_TIM_Base_Start_IT(&htim6)后,TIM6就會開始工作。

下面是它的工作原理,自動進行的,不用干預,我們只需大概地知道工作過程、原理:

TIM會自動檢測脈沖信號,每來一個脈沖,計數器CNT就會硬件自動加1。

當寄存器CNT的計數值==設定的自動重裝載值ARR,就會產生中斷(溢出中斷)。

發生中斷時,CNT值會被硬件清0,重新開始下一輪計數; 硬件自動找尋中斷函數入口。

使用CubeMX生成的HAL代碼,我們不需要像使用標準庫時那樣自己編寫中斷函數,CubeMX已幫我們整理好中斷函數的跳轉,只需要重寫中斷回調函數。

3、重寫TIM6的中斷回調函數

基本定時器,只有一種中斷,所以也只有一個中斷回調函數:HAL_TIM_PeriodElapsedCallback();

我們可以在工程中任意一個c文件中編寫它。

習慣上,會在main.c的尾部編寫這個函數。

如下圖,我們在main.c的? 注釋行 /* USER CODE BEGIN 4 */?下面編寫它。

如果工程中已有這個函數,我們只需在函數內增加TIM6的判斷部分;

如果工程中沒有這個函數,增加即可。

所有TIM的ARR溢出中斷(即周期結束),? 都會統一調用它。

在這個回調函數中,我們執行的動作是:每1000ms,?反轉PB2電平(LED)。

如果你的開發板上,PB2引腳接的是?LED,?而且也初始化成輸出模式,它就會每1秒閃爍1次。

特別地說明一個情況:

在前面CubeMX的配置中,我們的TIM6配置是:84MHz的時鐘,84的分頻值,1000的周期值。

這樣,硬件上每個脈沖時長是1us,每1000個脈沖為1周期,即每1ms產生1次中斷,調用這個回調函數。

然后,我們在回調函數中,為了實現1秒的執行,定義了一個cnt變量,每調用1次回調函數,cnt加1。當cnt==1000時,就執行閃燈動作。

這里要特別說明的是:我們不應該這樣操作!

單片機,運行資源是很有限的。像STM32F407系列,168MHz。

這個回調函數,調用一次,大約300ns左右。如果按上面的設計,每秒調用1000次,那么每秒僅調用它就花費300us。

當任務少時,上面操作完全可行。但是當執行的中斷多、實時性要求高時,這樣就不適合了。

所以,我們設計單片機的代碼時,要適當地考慮資源的消耗。

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

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

相關文章

什么是Docker容器?

Docker是一種輕量級的虛擬化技術,同時是一個開源的應用容器運行環境搭建平臺,可以讓開發者以便捷方式打包應用到一個可移植的容器中,然后安裝至任何運行Linux或Windows等系統的服務器上。相較于傳統虛擬機,Docker容器提供輕量化的…

【C++通關攻略 · 基礎篇】輸入輸出語句

目錄 輸入語句 原理 什么是流? 語法 補充 輸出語句 原理 語法 補充 示例 輸入語句 輸入語句,就是用來接受用戶輸入的內容。比如用戶在控制臺輸入一個數字,就可以用輸入語句去就收。 原理 在 C 中,cin 就是最常用的輸入…

linux安裝mysql5.7

linux安裝mysql5.7 一、下載mysql5.7二、解壓包介紹三、上傳包到linux四、卸載mariadb五、安裝mysql六、修改權限七、啟動mysql八、使用過navicat創作不易,筆記不易,如覺不錯,請三連,謝謝~~ 一、下載mysql5.7 去mysql官方下載&am…

MES系統在離散制造企業中的功能解析

隨著信息技術的快速發展和制造業的轉型升級,MES在離散制造企業中的作用日益凸顯。MES系統不僅提高了生產效率和產品質量,還優化了資源配置,增強了企業的市場競爭力。 一、生產管理功能 MES系統能夠實時監控生產現場的各種數據,包…

二叉搜索樹題目:將有序數組轉換為二叉搜索樹

文章目錄 題目標題和出處難度題目描述要求示例數據范圍 解法思路和算法證明代碼復雜度分析 題目 標題和出處 標題:將有序數組轉換為二叉搜索樹 出處:108. 將有序數組轉換為二叉搜索樹 難度 4 級 題目描述 要求 給定整數數組 nums \texttt{nums}…

一、低代碼平臺-數據庫設計規范

數據庫設計規范目的 a、規格化管理各個業務數據表 b、通過字段名稱快速了解表與表之間的關聯關系 c、通過字段第一位快速了解字段數據類型等等所有規范都為了更好的開發與后期系統運維。 1、數據庫設計規范 答:數據庫安裝必須選擇大小寫敏感;編碼格式…

15 easy 141. 環形鏈表

法1:快慢指針法: //給你一個鏈表的頭節點 head ,判斷鏈表中是否有環。 // // 如果鏈表中有某個節點,可以通過連續跟蹤 next 指針再次到達,則鏈表中存在環。 為了表示給定鏈表中的環,評測系統內部使用整數…

Python爬蟲副業真的可行嗎?

首先回答你,是可行的,python爬蟲能當副業,副業的方式比較多,等下我會講幾種。 那學到哪個層次可以接單呢?主要看你是接什么樣的單,爬一些資料,視頻這種簡單的學一兩個月就沒什么問題&#xff0…

第一天 走進Docker的世界

第一天 走進Docker的世界 介紹docker的前世今生,了解docker的實現原理,以Django項目為例,帶大家如何編寫最佳的Dockerfile構建鏡像。通過本章的學習,大家會知道docker的概念及基本操作,并學會構建自己的業務鏡像&…

一文讀懂Persistence One- 如何將Restaking帶入Cosmos

Persistence One正在將Restaking引入Cosmos。用戶將能夠通過pSTAKE、Stride、Quicksilver和Milkyway將Liquid Staked Tokens(如ATOM、TIA、DYDX等)存入Persistence One,對其進行Restaking,從而安全地連接更多區塊鏈,首…

MySQL:數據庫中有哪些鎖

1、全局鎖 加上全局鎖后整個數據庫就處于只讀狀態了,這時其他線程執行以下操作,都會被阻塞: 對數據的增刪改操作,比如 insert、delete、update等語句;對表結構的更改操作,比如 alter table、drop table 等…

Android APK包反編譯為java文件教程

方法 流程: test.apk -> smali文件 -> dex文件 -> jar文件 ->java 文件 將APK包解壓為 smail文件 下載 apktool工具 apktool.jar 將 test.apk 和 apktool.jar放同一目錄下,并執行以下命令 java -jar apktool.jar d -f xxx.apk -o xxx(解…

【如何像網吧一樣弄個游戲菜單在家里】

GGmenu 個人家庭版游戲、應用管理 桌面圖標管理器

[環境配置]ssh連接報錯“kex_exchange_identification: read: Connection reset by peer”

已經被VScode ssh毒死好幾次了,都是執行命令意外中斷,然后又VSCode里連不上、本機Terminal也連不上了。。。 重啟遠程服務器,VSCode可以連上了, 系統ssh還是不行,報錯“kex_exchange_identification: read: Connecti…

容器(JAVA基礎)

一.泛型 在Java中,泛型(Generics)是JDK 5.0引入的一個新特性,它允許在定義類、接口和方法時使用類型參數(type parameters)。類型參數在使用前必須先被實際類型(如Integer、String等)替代,這個過程稱作類型實例化或類型擦除。泛型提供了編譯時類型安全,減少了運行時…

CSS~~

CSS是一門語言,用于控制網頁表現 CSS(Cascading Style Sheet):層疊樣式表 W3C標準:網頁主要由三部分組成 結構:HTML 表現: CSS 行為:JavaScript 1,CSS的導入方式 (1)內聯樣式 在標簽內部使用style屬性,屬性值是cs…

類 Unix 系統的文件目錄結構

以下是類 Unix 系統的文件目錄結構、各個目錄主要存放的文件以及縮寫的全稱的詳細說明: 根目錄 /: 全稱: Root Directory說明:根目錄是整個文件系統的起點,包含了所有其他目錄和文件。 /bin 目錄: 全稱: Binary說明&a…

Nginx最常用的指令

服務管理 sudo systemctl status nginx # nginx當前狀態 sudo systemctl reload nginx # 重新加載 nginx sudo systemctl restart nginx # 重啟nginxsudo nginx -t # 檢查語法 nginx # 啟動 nginx -s reload # 重啟 nginx -s stop # 關閉進程 nginx -s quit #…

Java學習筆記002——類的修飾符

在Java語言中,類的訪問修飾符決定了其它類能夠訪問該類的方式。類有如下4種訪問修飾符,在創建類時用于類的聲明: 1、public: 當一個類被聲明為public時,它可以從任何其他類中被訪問,無論這些類位于哪個包中。通常&am…

uniapp使用vue3語法構建自定義導航欄,適配小程序膠囊

具體代碼 <template><view class"nav-wrapper-container" :style"height:navBarHeight px"><view class"nav-status-container" :style"height:navstatusBarHeight px;" /><view v-if"isCustom" clas…