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
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow