原文:
https://blog.csdn.net/qq_35629563/article/details/118675981
STM32的定時器開發基礎的時候,產生了一個疑問,這里不需要使能自動重裝載嗎?
帶着這個疑問我去查了一下《STM32 HAL 庫開發實戰指南》,在第 31 章 TIM—基本定時器找到了詳細的解釋。
自動重載寄存器 TIMx_ARR 用來存放於計數器值比較的數值,如果兩個數值相等就生成事件,將 相關事件標志位置位,生成 DMA和中斷輸出。 TIMx_ARR 有影子寄存器,可以通過 TIMx_CR1 寄存器的 ARPE 位控制影子寄存器功能,如果 ARPE 位置 1,影子寄存器有效,只有在事件更新 時才把 TIMx_ARR 值賦給影子寄存器。如果 ARPE 位為 0,修改 TIMx_ARR 值馬上有效。
另外,我又去查了《STM32F10xxx參考手冊》,最后得出了一個結論:auto-reload precload 對應着TIMx 控制寄存器 1(TIMx_CR1)的位7——ARPE
ARPE:自動重裝載預裝載允許位 (Auto-reload preload enable)
0: TIMx_ARR寄存器沒有緩沖;
1: TIMx_ARR寄存器被裝入緩沖器。
具體時序圖如下所示:
圖57 計數器時序圖,當ARPE=0時的更新事件(TIMx_ARR沒有預裝入)
圖58 計數器時序圖,當ARPE=1時的更新事件(預裝入了TIMx_ARR)
結論
1. auto-reload preload=Disable:自動重裝載寄存器寫入新值后,計數器立即產生計數溢出,然后開始新的計數周期
2. auto-reload preload=Enable:自動重裝載寄存器寫入新值后,計數器完成當前舊的計數后,再開始新的計數周期