Ⅰ、概述
本文在前面文章“STM32基本的計數原理”的基礎上進行拓展,講述關於“定時器輸入捕獲”的功能,和上一篇文章“定時器比較輸出”區別還是挺大的。在引腳上剛好相反:一個輸入、一個輸出。
本文只使用一個TIM5通道3(也可其他通道)捕獲輸入脈沖的頻率,通過捕獲兩次輸入脈沖的間隔時間來計算脈沖波形的頻率。間隔一定時間讀取頻率並通過串口打印出來。
當然也可通過兩路通道捕獲脈沖信號的占空比,計划后期整理。
筆者通過信號發生器產生信號,上位機串口助手顯示捕獲的脈沖頻率。(沒有信號發生器的朋友可以結合上一篇文章PWM輸出做信號源:在同一塊板子上也可以使用不同定時器,將輸出引腳接在輸入引腳)
先看一下實例的實驗現象:

關於本文的更多詳情請往下看。
Ⅱ、實例工程下載
筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。
筆者提供的實例工程都是在板子上經過多次測試並沒有問題才上傳至360雲盤,歡迎下載測試、參照學習。
提供下載的軟件工程是STM32F417的,但F4其他型號也適用(適用F4其他型號: 關注微信,回復“修改型號”)。
STM32F4_TIM輸入波形捕獲(脈沖頻率)實例:
https://yunpan.cn/cB6XrSi6rK3TP 訪問密碼
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.
Ⅴ、說明
關於筆者提供的軟件工程實例,可關注微信,在會話框回復“關於工程”,有關於工程結構描述、型號修改等講述。
以上總結僅供參考,若有不對之處,敬請諒解。
Ⅵ、最后
更多精彩文章我講第一時間在微信公眾號里面分享。
本着免費分享的原則,方便大家手機學習知識,定期在微信平台分享技術知識。如果你覺得分享的內容對你有用,又想了解更多相關的文章,請用微信搜索“EmbeddDeveloper” 或者掃描下面二維碼、關注,將有更多精彩內容等着你。


