In this example, we’ll use direct register access to enable the GPT1
timer module at 8 MHz
counter frequency in free-running mode. Free-running mode means that the timer will just roll over once it has reached 0xFFFFFFFF
(maximum 32 bit value).
How to configure the timer
CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Enable clock to GPT1 module GPT1_CR = 0; // Disable for configuration GPT1_PR = 3 - 1; // Prescale 24 MHz clock by 3 => 8 MHz GPT1_CR = GPT_CR_EN /* Enable timer */ | GPT_CR_CLKSRC(1) /* 24 MHz peripheral clock as clock source */ | GPT_CR_FRR /* Free-Run, do not reset */;
Full example
This example works in PlatformIO without any external libraries, but you need to set monitor_speed = 115200
in platformio.ini
so the serial port is read at the correct speed.
#include <Arduino.h> void setup() { // Setup USB serial port so we can print the timer value Serial.begin(115200); // Enable timer CCM_CCGR1 |= CCM_CCGR1_GPT1_BUS(CCM_CCGR_ON); // Enable clock to GPT1 module GPT1_CR = 0; // Disable for configuration GPT1_PR = 3 - 1; // Prescale 24 MHz clock by 3 => 8 MHz GPT1_CR = GPT_CR_EN /* Enable timer */ | GPT_CR_CLKSRC(1) /* 24 MHz peripheral clock as clock source */ | GPT_CR_FRR /* Free-Run, do not reset */; } void loop() { // Print the timer count every ~100 ms Serial.println(GPT1_CNT); delay(100); }