STM32 - Timers - Measuring Time

From Embedded Workshop
Revision as of 11:11, 4 October 2022 by JMerkle (talk | contribs)
Jump to navigation Jump to search

Timers

Each of the STM32 parts has multiple timers, but some are better than others for measuring the duration of a function.

I firmly believe until you actually measure the time a function takes, you are just guessing,
thinking "the function is working just fine"....
But, to measure the duration of many functions, you need a time base much finer than an OS Tick.
Micro-second resolution is often required.
Although I'd like a 32 bit timer, not all the STM32 parts have one.
I'm pretty sure all have at least a 16-bit timer.  Let's choose an unused timer, and get it
counting micro-second units of time.

Choose and Configure A Timer

Open STM32CubeIDE, <project>.ioc file to look at the timers and find one that's available
1) Click on "Pinout & Configuration" tab
2) Click on "Timers"
3) For STM32 devices without a 32-bit timer, like the STM32-F103RB, use TIM4
4) Since we don't need an output pin for this timer, configure it as follows:
   Slave Mode: Disable
   Trigger Source: Disable
   □  Internal Clock - unchecked
   Channel1: PWM Generation No Output
5) In the Parameter Settings section, configure as follows:
   Prescaler (PSC -16 bits value): 64-1     This assumes the SYSCLK is 64MHz.  (Adjust accordingly)
   Counter Mode: Up
   Counter Period (AutoReload Register - 16 bits value): 65535
   Internal Clock Division (CKD): No Division
   PWM Generation Channel 1
   Mode: PWM mode 1
   Pulse (16 bits value): 0
   Output compare preload Enable
   Fast Mode: Disable
   CH Polarity: High

Start The Timer