ESP32 定时器 Arduino 出现问题

问题描述 投票:0回答:1

我在使用 esp32 时遇到了麻烦。 我想要一个来自 240MHz esp32 时钟的 128Hz (7812.5μs) 定时器。 我将预分频器设置为 120 和 15625 刻度以获得所需的频率。

240Mhz / 120 = 2Mhz 2MHz / 15625 = 128Hz

但是当我运行以下代码时,串行监视器每 3 秒打印一次“3000”,而它应该每秒打印“1000”。


#define TMR_ID 0
#define TMR_PRESCALER 120

unsigned long start_ = 0;

float counter = 0;

hw_timer_t *timer = NULL;
void IRAM_ATTR timer_isr(void) {
  counter++;
}

void setup() {
  Serial.begin(115200);
  timer = timerBegin(TMR_ID, TMR_PRESCALER, true);                  //timer 0, div 120
  timerAttachInterrupt(timer, &timer_isr, true);  //attach callback
  timerAlarmWrite(timer, 15625, true); //set time in us
  timerAlarmEnable(timer);
  Serial.print("start");
  start_ = millis();
}

void loop() {
  if (counter == 128) {
    Serial.println(millis() - start_);
    counter = 0;
    start_ = millis();
  }

}

将预分频器替换为40后,似乎工作正常。 有人可以回答这个问题吗?

timer arduino esp32
1个回答
0
投票

通常定时器时钟设置为 80 MHz,即使 CPU 时钟设置为 240 MHz。 因此,将预分频器替换为 40 即可求解方程。 (80Mhz/40)/15625 = 128Hz

© www.soinside.com 2019 - 2024. All rights reserved.