關於STM32的CPU為32位,定時器卻為16位的探討
STM32的通用定時器可以實現很多功能,例如:定時計數、測量外部信號脈沖寬度、產生PWM波形、測量輸入的PWM波形等。在所有這些操作中,定時器的位數主要影響兩個參數,一個是定時或測量的精度,另一個是定時的時間長度。下面我們以一個列表看一下定時的精度和定時的長度有多少: 關於各個預分頻器的作用請參考下圖的右半部分: 從表中可以看出,在最高精度下(14ns)定時長度只有0.91ms,在精度為250ns(即4MHz)時定時長度可達16.38ms。這是僅使用了定時器的獨立工作模式的情況。 對於需要高精度並且長延時的應用,16位的定時(上述精度和時間長度)就不夠了,這個問題可以有兩種解決辦法;第一個辦法是通過軟件的接力完成,這個方法的可行性在於定時時間較長,允許軟件有足夠的時間介入計數,這種辦法非常方便,多數情況都可使用。第二種辦法是使用STM32特有的定時器級聯功能,實現32位的計數效果,因為級聯是由硬件觸發的,當設置好各項寄存器后,軟件不必中途干預,可以達到高精度長延時的要求。進一步地,STM32最多有四個定時器,如果串聯起來,甚至可以實現4*16=64位的計數效果。 簡單地說級聯功能,即是一個定時器的定時條件滿足后,可以產生一個觸發信號啟動另一個定時器的定時操作。 在ST的網站上有一個應用筆記和對應的例子程序,詳細說明和演示了如何使用STM32的級聯功能實現32位的輸入捕獲和32位的輸出比較功能,各位可以研究一下: 應用筆記下載地址:http://www.st.com/stonline/products/literature/an/13711.pdf 演示程序下載地址:http://www.st.com/stonline/products/support/micro/files/an2592.zip 這是該應用筆記的摘要: 【AN2592 如何使用STM32F101xx和STM32F103xx的時鍾鏈接功能實現定時器的32位精度】 (2007年8月) 許多應用需要32位的精度,用於測量超過幾百秒的外部信號的周期並產生延遲或較大間隔的周期信號。 STM32F101xx和STM32F103xx提供了鏈接兩個16位定時器借以獲得32位精度的能力,這是使用了定時器的一種特殊配置和鏈接機制。 本文給出了模擬一個32位定時器的基本原則;介紹了兩個基本的操作模式:輸入捕獲模式和輸出比較模式。每個模式都是單獨介紹並附有實例。 |