Ⅰ、概述
本文在前面文章“STM32基本的計數原理”的基礎上進行拓展,講述關于“定時器輸入捕獲”的功能,和上一篇文章“定時器比較輸出”區別還是挺大的。在引腳上剛好相反:一個輸入、一個輸出。
本文只使用一個TIM5通道3(也可其他通道)捕獲輸入脈沖的頻率,通過捕獲兩次輸入脈沖的間隔時間來計算脈沖波形的頻率。間隔一定時間讀取頻率并通過串口打印出來。
當然也可通過兩路通道捕獲脈沖信號的占空比,計劃后期整理。
筆者通過信號發生器產生信號,上位機串口助手顯示捕獲的脈沖頻率。(沒有信號發生器的朋友可以結合上一篇文章PWM輸出做信號源:在同一塊板子上也可以使用不同定時器,將輸出引腳接在輸入引腳)
先看一下實例的實驗現象:
關于本文的更多詳情請往下看。
Ⅱ、實例工程下載
筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。
筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。
提供下載的軟件工程是STM32F417的,但F4其他型號也適用(適用F4其他型號:關注微信,回復“修改型號”)。
STM32F4_TIM輸入波形捕獲(脈沖頻率)實例:
https://yunpan.cn/cB6XrSi6rK3TP 訪問密碼 7eed
STM32F4資料:
https://yunpan.cn/cR2pxqF5x2d9c 訪問密碼 53e7
Ⅲ、原理描述
筆者將TIM分為三大塊:時基部分、比較輸出和輸入捕獲,請看下面截圖“通用TIM框圖”。
前面的文章已經將“時基部分”的一些基礎知識講述過了,“時基部分”的功能是比較有用的,它除了可以用來延時(定時)之外,它還可以拿來觸發其他一些功能,如:觸發DA轉換、AD采集等。
上一篇文章講述的就是圖中比較輸出部分,比較輸出部分功能相對比較簡單。
該文主要講述“輸入捕獲”部分,這部分輸入的通道1與2、通道3與4可以相互協作。該文只使用了TIM5的通道3,捕獲輸入信號頻率。
通用TIM框圖:
上面兩圖截取“STM32F4x5、x7參考手冊”建議下載手冊參看。
Ⅳ、源代碼分析
筆者以F4標準外設庫(同時也建議初學者使用官方的標準外設庫)為基礎建立的工程,主要以庫的方式來講述。
1.RCC時鐘
該函數位于bsp.c文件下面;
本文提供的例程也可以使用TIM2(只要將例程源代碼中使用到的TIM5改為TIM2,以及引腳改正過來就行)。
重點注意:
A.外設RCC時鐘的配置要在其外設初始化的前面;
B.匹配對應時鐘。
比如:RCC_APB2外設不要配置在RCC_APB1時鐘里面
【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);這樣能編譯通過,但這是錯誤的代碼】
2.TIM輸入捕獲引腳配置
該函數位于timer.c文件下面;
注意2點:
A.引腳與通道對應:這個需要參看“數據手冊”,該文TIM5通道3對應的引腳就是PA2.
B.復用配置:GPIO_PinAFConfig(GPIOA,GPIO_PinSource2, GPIO_AF_TIM5);
這個地方對于F1轉F0、F4等的朋友需要注意,更加芯片系列及庫的不同,他們之間存在一定的差異。
3.TIM輸入捕獲配置
該函數位于timer.c文件下面;
“時基部分”是在前面兩篇文章講述過的,這里主要對“輸入捕獲”部分理解,主要5個參數:
捕獲通道:就是我們捕獲的通道;
捕獲極性:就是我們捕獲脈沖的高還是低電平;
捕獲選擇:是直接捕獲該通道,還是上面說的1,2通道協助捕獲;
捕獲分頻:對捕獲的脈沖分頻;
捕獲濾波:過濾掉波形;
4.NVIC配置
該函數位于bsp.c文件下面;
這里不用多說,只是提醒大家不要忘記配置這里。
5.計算捕獲波形頻率原理
該函數位于stm32f4xx_it.c文件下面;
該函數是中斷函數,也是計算頻率重要的函數;
A.兩次捕獲值
捕獲配置中,捕獲的極性是高電平,這里就是在“上升沿”中斷(捕獲),如果配置為“下降沿”,則是在信號的下降沿中斷。
B.計算兩次捕獲差值
這里常人理解都是:capture = (capture_value2- capture_value1);
但是,需要考慮另外兩種情況,就是計數器在計滿和相等時候。
C.計算頻率
這里可以理解為:1秒鐘計了多少個數。
但是需要注意的是截圖中“/2”,對系統時鐘除2,原因在于RCC給TIM提供的時鐘就是除了2的,所以,這個地方需要/2.
-
Tim
+關注
關注
0文章
82瀏覽量
18037 -
脈沖頻率
+關注
關注
0文章
12瀏覽量
8003 -
STM32F4
+關注
關注
3文章
194瀏覽量
28379
發布評論請先 登錄
相關推薦
評論