In our previous post Minimal STM32 HardwareTimer PlatformIO / Arduino timer interrupt blink example we showed how to use HardwareTimer
to blink the onboard LED of our STM32F407 board using a timer interrupt.
In this post, we’ll provide an example of how to use HardwareTimer
and have a really fast interrupt which runs at 1 MHz – in other words: one million times per second.
#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() { }
Note that when running such a quick interrupt, you can’t do all too much within the interrupt before the next time the interrupt will run.