簡體   English   中英

帶寄存器的 stm32 定時器計數器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM