筆者在進行某專案開發時,需要實時調節定時器的週期,以控制定時器下次更新中斷的時間。
自動重裝載暫存器 arr 是乙個 16 位的暫存器,這裡面裝著計數器能計數的最大數值。當計數到這個值的時候,如果使能了中斷的話,定時器就產生溢位中斷。在物理上這個暫存器對應2個暫存器,乙個是程式設計師可以寫入或讀出的暫存器,稱為preload register(預裝載暫存器),另乙個是程式設計師看不見的、但在操作中真正起作用的暫存器,稱為shadow register(影子暫存器)。
在圖中可以看到auto-reload register這個框有乙個陰影,有些其它暫存器也有用陰影表示,如我用藍色標出的capture/compare暫存器;有陰影的暫存器,表示在物理上這個暫存器對應2個暫存器,乙個是程式設計師可以寫入或讀出的暫存器,稱為preload register(預裝載暫存器),另乙個是程式設計師看不見的、但在操作中真正起作用的暫存器,稱為shadow register(影子暫存器);正如手冊上的14.3.1節所說,根據timx_cr1暫存器中apre位的設定,preload register的內容可以隨時傳送到shadow register,即兩者是連通的(permanently),或者在每一次更新事件(uev)時才把preload register的內容傳送到shadow register。參考文獻
禁用預裝載暫存器,修改arr的值(tim_period)會直接操作影子暫存器,新的arr值將立即生效:
使能預裝在暫存器,修改arr的值(tim_period)會操作預裝載暫存器,直到更新事件後,arr預裝載暫存器的值才會被拷貝到影子暫存器中:tim_arrpreloadconfig
(tim4, disable)
;
tim_arrpreloadconfig函式的定義如下:tim_arrpreloadconfig
(tim4, enable)
;
/**
* @brief enables or disables timx peripheral preload register on arr.
* @param timx: where x can be 1 to 17 to select the tim peripheral.
* @param newstate: new state of the timx peripheral preload register
* this parameter can be: enable or disable.
* @retval none
*/void
tim_arrpreloadconfig
(tim_typedef* timx, functionalstate newstate)
else
}
stm32關定時器 STM32定時器TIM3程式
include led.h include delay.h include key.h include sys.h include usart.h include timer.h stm32開發板實驗8 定時器中斷實驗 int main void delay init 延時函式初始化 nvic co...
STM32開發 Systick定時器
參看 stm32菜鳥成長記錄 系統滴答定時器 systick 應用 參看 systick定時器和delay延遲函式 systick定時器被 在nvic中,用於產生systick異常 異常號 15 在以前,大多作業系統需要乙個硬體定時器來產生作業系統需要的滴答中斷,作為整個系統的時基。例如,為多個任務...
stm32的定時器
stm32一共有8個都為16位的定時器。其中tim6 tim7是基本定時器 tim2 tim3 tim4 tim5是通用定時器 tim1和tim8是高階定時器。1.基本定時器 基本定時器tim6和tim7只具備最基本的定時功能,就是累加的時鐘脈衝數超過預定值時,能觸發中斷或觸發dma請求。由於在晶元...