STM32 - Timers - Measuring Time
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.
![](/wiki/images/thumb/6/61/STM32-F103_TIM4.jpg/300px-STM32-F103_TIM4.jpg)
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