我尝试在STM32f103c8t6(bluepill)上使用timer1。我已经阅读了数据表和互联网答复/问题。但是我不明白“如何使用寄存器调整周期值”。我在HAL库中使用计时器,并计算时序计算,周期和预分频器值等。

(period)*(prescaler) / (clock Speed) = second

这是我已经知道的公式。

我的时钟速度是72Mhz,我将预分频器调整为1000。我想将Period值设置为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设置。

07-28 02:51