FreeRTOS Tick/Tickless via LPTIM in STM32U5
Use LPTIM for the FreeRTOS tick instead of the SysTick Timer for ultra-low-power applications.
- No drift or slippage in kernel time
- Use STOP modes even while FreeRTOS timers are running or delays are underway
- For any STM32 with LPTIM (see LPTIM-Tick)
This repository demonstrates adaptation of the lptimTick.c gist to the STM32U5 series MCU. The specific target platform is the ST B-U585I-IOT02A (STM32U585). The project uses STM32CubeIDE and its integrated code-generation tool (STM32CubeMX). However, lptimTick.c is compatible with any toolchain supported by FreeRTOS.
For a thorough evaluation, this project can be built without tickless idle, with the default tickless idle, or with the custom tickless idle provided by lptimTick.c. See branches for additional evaluation options.
Press the blue button to cycle between tests:
- Maintain kernel time only. LED blinks every 5 seconds.
- Validate tick timing. LED blinks every 2 seconds.
- Stress test tick timing. LED blinks every second.
Tests 2 and 3 display live test results to a serial terminal. Connect to the STLink Virtual COM Port at 115200 8N1. Additionally, the LED blinks twice (instead of just once) in case of test failure.
Current readings shown are averages, not including the LED
With lptimTick.c (configUSE_TICKLESS_IDLE 2
)
- Test 1: 9μA, no drift
- Test 2: 35μA, no drift
- Test 3: 57μA, no drift
Default tickless idle (configUSE_TICKLESS_IDLE 1
)
- Test 1: 0.49mA, trivial drift
- Test 2: 0.50mA, trivial drift
- Test 3: 0.51mA, drift via 1ms "jumps" -- resolved by kernel PR59
Tickless disabled (configUSE_TICKLESS_IDLE 0
)
- Test 1: 1.21mA, no drift
- Test 2: 1.21mA, no drift
- Test 3: 1.21mA, no drift