1MHz-Interrupt in PlatformIO / Arduino auf STM32 implementieren

English Deutsch

In unserem vorherigen Beitrag Minimal STM32 HardwareTimer PlatformIO / Arduino Timer-Interrupt Blink-Beispiel haben wir gezeigt, wie HardwareTimer verwendet wird, um die On-Board-LED unseres STM32F407-Boards mit einem Timer-Interrupt blinken zu lassen.

In diesem Beitrag wird ein Beispiel gezeigt, wie HardwareTimer für einen sehr schnellen Interrupt verwendet wird, der mit 1 MHz läuft – anders gesagt: eine Million Mal pro Sekunde.

timer_interrupt.cpp
#include <Arduino.h>

HardwareTimer timer(TIM1);
bool ledOn = false;

void OnTimer1Interrupt() {
    ledOn = !ledOn;
    digitalWrite(PC13, ledOn ? HIGH : LOW);
}

void setup() {
    pinMode(PC13, OUTPUT);
    // Configure timer
    timer.setPrescaleFactor(21); // Set prescaler to 21 => timer frequency = 168/21 = 8 MHz (from prediv'd by 1 clocksource of 168 MHz)
    timer.setOverflow(8); // Set ARR to 8 => timer frequency = 1 MHz
    timer.attachInterrupt(OnTimer1Interrupt);
    timer.refresh(); // Make register changes take effect
    timer.resume(); // Start timre
}

void loop() {
}

Beachten, dass bei einem so schnellen Interrupt nicht allzu viel im Interrupt erledigt werden kann, bevor der Interrupt das nächste Mal ausgeführt wird.


Check out similar posts by category: C/C++, PlatformIO, STM32