[英]Stm32 Timer Counter With Registers
我嘗試在 STM32f103c8t6(bluepill)上使用 timer1。 我閱讀了數據表和互聯網響應/問題。 但是我無法理解“如何使用寄存器調整周期值”。 我在 HAL 庫中使用定時器並計算時序計算、周期和預分頻器值等。
(period)*(prescaler) / (clock Speed) = second
這是我已經知道的公式。
我的時鍾速度是 72Mhz,我將預分頻器調整為 1000。我想將周期值設置為 72000,我將有 1 秒計時器。 但我不知道如何調整周期值,它在哪里。
void TIM1_Config(){
RCC-> APB2ENR |= 0x00000400; //TIM1 CLK Enable
TIM1-> CR1 |= 0x0083; //Auto Reload,Update Request Source, Counter Enable
TIM1-> DIER |= 0x0003; //CC1 Interrupt Enable, Update Interrupt Enable
TIM1-> ARR = 0x0064; //100 is set as Auto Reload Value
TIM1-> PSC |= 0x03E8; //1000 is set as Prescaler Value
TIM1-> (period value I need it)???? // it will set 72000
}
首先,請注意 TMR 時鍾可能與您的系統時鍾不同。 因此,請確保您正確調整了 APB2 時鍾。
假設您的 APB2 時鍾也是 72 MHz,對於 1 秒周期,您需要以某種方式將其除以 72000000 (72e6)。 您需要使用 ARR 和 PSC 寄存器,這樣(ARR + 1) * (PSC + 1) = 72e6
。 請記住,這些寄存器是 16 位的,因此它們不能大於 65535。
一種可能的組合是:
TIM1->PSC = 1124;
TIM1->ARR = 63999;
請注意,我沒有檢查您的代碼/TMR 設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.