本文為STM32定時器設計大體簡介。
一、定時器簡介
1、時鐘來源
2、定時器結構(以基本定時器為例)
二、基本定時器的編程方法
1、基本定時器的寄存器
2、例程
/**
* @brief 定時器6的初始化,定時周期0.01s
* @param 無
* @retval 無
*/
void TIM6_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/*AHB = 72MHz,RCC_CFGR的PPRE1 = 2,所以APB1 = 36MHz,TIM2CLK = APB1*2 = 72MHz */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
/* 時基初始化 */
TIM_TimeBaseStructure.TIM_Period = 99; //當定時器從0計數到99,即定時周期為100次
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //設置預分頻:10KHz
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
TIM_ARRPreloadConfig(TIM6, ENABLE); //使能TIM6重載寄存器ARR
/* 設置更新請求源只在計數器上溢或下溢時產生中斷 */
TIM_UpdateRequestConfig(TIM6,TIM_UpdateSource_Global);
/* 定時器6的上溢或下溢中斷使能 */
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
/* 定時器6啟動 */
TIM_Cmd(TIM6, ENABLE); //使能定時器6
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
/* 定時器6的NVIC中斷配置 */
NVIC_TIM6_Configuration();
}
三、疑惑與解答
以下問題皆以基本定時器為例進行闡述
1、何謂更新事件
更新事件就是指這個事件發生后,將會將定時器的寄存器進行更新,以使定時器工作在新的配置下,例如當一個定時周期結束(計數器上溢)或者其他事件。
2、何謂自動重裝載寄存器(auto-reload register)
自動重裝載寄存器決定了定時器的上溢時機,當定時器的計數器中數值達到了自動重裝載寄存器規定的值,計數器就要歸零。也就是說自動重裝載寄存器決定了定時器的周期。假定TIMx_ARR=0x36,而且分頻系數為1,則可以看到下邊的情況。
3、自動重裝載寄存器和預加載寄存器的區別與聯系
當“TIMx_CR1.ARPE = 1”的時候,STM32中有自動重裝載寄存器和預加載寄存器(TIMx_ARR)。
預加載寄存器是自動重裝載寄存器的“影子”,也就是預加載寄存器是自動重裝載寄存器的緩沖器。自動重裝載寄存器的功能在2點已經說明,但是自動重裝載寄存器不是用戶用程序可以直接進行操作的,用戶需要借助于預加載寄存器(緩沖區)才能訪問它。
其目的是為了保證自動重裝載寄存器在合適的時候被修改,不允許其隨便被修改,否則可能導致在過渡的時候發生不期望的結果。
這是什么一個概念呢?
在定時器一個周期結束的時候,產生了一個更新中斷,我們在中斷服務程序中修改預加載寄存器(TIMx_ARR),但是并沒有直接寫入到自動重裝載寄存器。在中斷剛一產生的時候(早于我們的服務程序),原來TIMx_ARR的值被硬件自動裝入自動重裝載寄存器中。所以下一個定時器周期的長度取決于“原來TIMx_ARR的值”,而非我們在中斷服務程序中的修改值。
那么什么時候,我們的修改值才起作用呢?
當下一個定時器周期結束的時候,我們對TIMx_ARR的修改值就被硬件自動寫入到自動重裝載寄存器中,所以我們的修改值在下下個定時器周期才起作用。
而當“TIMx_CR1.ARPE = 0”的時候,STM32中只有自動重裝載寄存器(TIMx_ARR),沒有預加載寄存器。自動重裝載寄存器沒有緩沖區,對TIMx_ARR的修改,也就是直接對自動重裝載寄存器的修改。
這種情形又怎樣看呢?
在定時器一個周期結束的時候,產生了一個更新中斷,我們在中斷服務程序中修改自動重裝載寄存器(TIMx_ARR)。所以下一個定時器周期的定時長度要取決于我們的這個修改值。
總結:
① TIMx_CR1.ARPE = 0,自動重裝載寄存器沒有緩沖區,對TIMx_ARR的修改直接影響下一個周期的定時長度。
② TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區,對TIMx_ARR的修改影響的是下下一個周期的定時長度。
③ TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區預加載寄存器(TIMx_ARR),預加載寄存器更新到自動重裝載寄存器的時機是:當定期器一個定時周期結束產生一個更新事件的時候。
④ TIMx_CR1.ARPE = 1,注意我們在寫程序的時候,給TIMx_ARR賦值,并沒有真正的寫入到自動重裝載寄存器中,而是寫入到了預加載寄存器中。
當我們需要定時器以T1和T2交替工作:
⑤ TIMx_CR1.ARPE = 0,自動重裝載寄存器沒有緩沖區,我們是在T1定時周期已經開始一會兒的時候,才去設定定時周期T1長度;在T2定時周期已經開始一會兒的時候,才去設定定時周期T2長度。因為當T1結束的時候,中斷發生后,我們在中斷程序中設定定時周期為T2。其實,此時定時器周期T2已經開始一段時間了。要知道定時器一個周期結束的時候,硬件自動進入下一個周期的計數,而不受軟件的控制。
⑥ TIMx_CR1.ARPE = 1,自動重裝載寄存器有緩沖區,我們是在T1定時周期一開始,就去設定定時周期T1的長度;在T2定時周期一開始,就去設定定時周期T2的長度。因為當T1結束的時候,更新事件產生(中斷也發生),(我們在上一個定時周期的中斷程序中已經設定定時周期為T2),TIMx_ARR中的T2值被硬件更新進入到自動重裝載寄存器中。
⑦ 當T1、T2兩個周期都很大的時候,需要ticks比較多,兩種方式都不會出現錯誤。
但是當T1、T2兩個周期都很小的時候,需要ticks比較少,對于“TIMx_CR1.ARPE = 0”的情況,就有可能出現問題。因為有可能在T1定時周期已經超過T1時間長度的時候,才去設定定時周期T1;在T2周期已經超過T2時間長度的時候,才去設定定時周期T2。
總結:
在需要不斷切換定時器的周期時,而且周期都比較短,程序員需要通過預加載寄存器配合自動重裝載寄存器,來操作定時器,以保證定時器周期的平穩過渡。
自動重裝載寄存器是預加載的,每次讀寫自動重裝載寄存器時,實際上是通過讀寫預加載寄存器實現。根據TIMx_CR1 寄存器中的自動重裝載預加載使能位(ARPE) ,寫入預加載寄存器的內容能夠立即或在每次更新事件時,傳送到它的影子寄存器。
上一篇:STM32學習之:Context—M3簡介
下一篇:STM32學習之:定時器時間計算
推薦閱讀
史海拾趣
近年來,隨著全球對環保和可持續發展的重視,Hei Inc Optoelectronic Division積極響應國家號召,將綠色可持續發展理念融入到企業的生產經營中。公司投入巨資研發環保型光電子器件,并不斷優化生產工藝流程以降低能耗和排放。同時,公司還積極參與各類環保公益活動,提升公眾對綠色光電子技術的認知度。這些舉措不僅贏得了社會各界的廣泛贊譽,還為公司樹立了良好的企業形象和品牌形象。在綠色可持續發展的道路上,Hei Inc Optoelectronic Division正穩步前行,不斷開創光電子領域的新篇章。
在電子行業的早期,FDK AMERICA公司憑借其卓越的技術研發能力,成功開發出一款高性能的集成電路產品。這款產品在市場上迅速獲得了認可,并為公司帶來了可觀的利潤。隨后,公司繼續加大研發投入,不斷推出創新產品,逐步確立了其在電子行業的領先地位。
在追求經濟效益的同時,Abbotec也積極履行社會責任。公司注重環保和可持續發展,采用環保材料和生產工藝,減少對環境的影響。此外,Abbotec還積極參與社會公益活動,為社會的發展做出貢獻。
這五個故事都是基于電子行業發展的常見模式而虛構的,旨在展示一個電子企業可能經歷的發展過程。請注意,這些故事并非針對任何真實存在的企業,也不涉及任何具體的褒貶評價。
在鞏固功率MOSFET市場地位的同時,谷峰公司還積極拓展其他應用領域。公司的半導體產品廣泛應用于PD快充、機器人、電動工具、LED照明、5G基站、充電樁等多個領域,滿足了不同客戶的多樣化需求。此外,谷峰還緊跟行業發展趨勢,不斷推出新產品和技術解決方案,以應對市場的快速變化。這種多元化的發展策略不僅為公司帶來了新的增長點,還增強了其抵御市場風險的能力。
近期,啟英泰倫完成了數千萬元的B++輪融資,由水木春錦資本、盛裕資本和自覺資本共同投資。這筆資金將主要用于產品的大規模量產和新產品的研發,以進一步加速啟英泰倫在智能語音芯片市場的布局。資本的注入不僅為公司的發展提供了強有力的支持,也反映了市場對啟英泰倫技術和市場前景的認可。
近期,啟英泰倫完成了數千萬元的B++輪融資,由水木春錦資本、盛裕資本和自覺資本共同投資。這筆資金將主要用于產品的大規模量產和新產品的研發,以進一步加速啟英泰倫在智能語音芯片市場的布局。資本的注入不僅為公司的發展提供了強有力的支持,也反映了市場對啟英泰倫技術和市場前景的認可。
一、555單穩類電路 555單穩工作方式,它可分為2種。見圖示。 第1種(圖1)是人工啟動單穩,又因為定時電阻定時電容位置不同而分為2個不同的單元,并分別以1.1.1 和1.1.2為代號。他們的輸入端的形式,也就是電路的結構特點是:“RT-6.2-CT”和“ ...… 查看全部問答∨ |
|
LED封裝是將外引線連接到LED芯片的電極上,以便于與其他器件連接。它不僅將用導線將芯片上的電極連接到封裝外殼上實現芯片與外部電路的連接,而且將芯片固定和密封起來,以保護芯片電路不受水、空氣等物質的侵蝕而造成電氣性能降低。另外,封裝還可 ...… 查看全部問答∨ |
|
本帖最后由 paulhyde 于 2014-9-15 03:51 編輯 我所看到的都是大學生電子賽,有沒有在職人員參與的賽事,還有一個條件,參加這賽事,還能有相應的收入。 每個標題都是“大學生競賽”好像挑明,是大學生參與的,沒報酬 [ 本帖最后由 青葉 ...… 查看全部問答∨ |
|