NavHAL 0.1.0
NAVRobotec's architecture-agnostic HAL for embedded systems.
Loading...
Searching...
No Matches
timer.h File Reference

Timer and SysTick register defines and API for STM32F4 (Cortex-M4). More...

#include "common/hal_types.h"
#include "utils/timer_types.h"
#include <stdint.h>
Include dependency graph for timer.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define RCC_APB1ENR_TIM2_OFFSET   0
#define RCC_APB1ENR_TIM3_OFFSET   1
#define RCC_APB1ENR_TIM4_OFFSET   2
#define RCC_APB1ENR_TIM5_OFFSET   3
#define RCC_APB2ENR_TIM1_OFFSET   0
#define RCC_APB2ENR_TIM9_OFFSET   16
#define RCC_APB2ENR_TIM10_OFFSET   17
#define RCC_APB2ENR_TIM11_OFFSET   18
#define SYST_CSR   (*(__IO uint32_t *)0xE000E010)
#define SYST_RVR   (*(__IO uint32_t *)0xE000E014)
#define SYST_CVR   (*(__IO uint32_t *)0xE000E018)
#define SYST_CALIB   (*(__IO uint32_t *)0xE000E01C)
#define SYST_CSR_EN_BIT   0
#define SYST_CSR_TICKINT_BIT   1
#define SYST_CSR_CLKSOURCE_BIT   2

Functions

void systick_init (uint32_t tick_us)
 Initialize the SysTick timer.
void delay_ms (uint32_t ms)
 Busy-wait delay in milliseconds.
void delay_us (uint64_t us)
 Busy-wait delay in microseconds.
uint64_t hal_get_tick (void)
 Get current system tick count.
uint32_t hal_get_tick_duration_us (void)
 Get configured tick duration.
uint32_t hal_get_tick_reload_value (void)
 Get SysTick reload value.
uint32_t hal_get_millis (void)
 Get system uptime in milliseconds.
uint32_t hal_get_micros (void)
 Get system uptime in microseconds.
void SysTick_Handler (void)
 SysTick interrupt handler.
void hal_systick_set_callback (void(*cb)(void))
void timer_init (hal_timer_t timer, uint32_t prescaler, uint32_t auto_reload)
 Initialize timer based on type.
void timer_start (hal_timer_t timer)
void timer_stop (hal_timer_t timer)
void timer_reset (hal_timer_t timer)
uint32_t timer_get_count (hal_timer_t timer)
void timer_enable_interrupt (hal_timer_t timer)
void timer_disable_interrupt (hal_timer_t timer)
void timer_clear_interrupt_flag (hal_timer_t timer)
void timer_attach_callback (hal_timer_t timer, void(*callback)(void))
void timer_detach_callback (hal_timer_t timer)
void TIM2_IRQHandler (void)
void TIM3_IRQHandler (void)
void TIM4_IRQHandler (void)
void TIM5_IRQHandler (void)
void TIM9_IRQHandler (void)
void TIM12_IRQHandler (void)
void timer_set_compare (hal_timer_t timer, uint8_t channel, uint32_t compare_value)
uint32_t timer_get_compare (hal_timer_t timer, uint32_t channel)
uint32_t timer_get_arr (hal_timer_t timer, uint32_t channel)
void timer_set_arr (hal_timer_t timer, uint32_t channel, uint32_t arr)
void timer_enable_channel (hal_timer_t timer, uint32_t channel)
void timer_disable_channel (hal_timer_t timer, uint32_t channel)
uint32_t timer_get_frequency (hal_timer_t timer)
void timer_set_prescaler (hal_timer_t timer, uint32_t prescaler)
void timer_set_auto_reload (hal_timer_t timer, uint32_t arr)

Detailed Description

Timer and SysTick register defines and API for STM32F4 (Cortex-M4).

This header contains register offsets, bit definitions, SysTick control, timer base addresses, and the public timer/SysTick API used by the HAL. All defines and function prototypes are intended for the STM32F4 series on a Cortex-M4 core.

Macro Definition Documentation

◆ RCC_APB1ENR_TIM2_OFFSET

#define RCC_APB1ENR_TIM2_OFFSET   0

◆ RCC_APB1ENR_TIM3_OFFSET

#define RCC_APB1ENR_TIM3_OFFSET   1

◆ RCC_APB1ENR_TIM4_OFFSET

#define RCC_APB1ENR_TIM4_OFFSET   2

◆ RCC_APB1ENR_TIM5_OFFSET

#define RCC_APB1ENR_TIM5_OFFSET   3

◆ RCC_APB2ENR_TIM10_OFFSET

#define RCC_APB2ENR_TIM10_OFFSET   17

◆ RCC_APB2ENR_TIM11_OFFSET

#define RCC_APB2ENR_TIM11_OFFSET   18

◆ RCC_APB2ENR_TIM1_OFFSET

#define RCC_APB2ENR_TIM1_OFFSET   0

◆ RCC_APB2ENR_TIM9_OFFSET

#define RCC_APB2ENR_TIM9_OFFSET   16

◆ SYST_CALIB

#define SYST_CALIB   (*(__IO uint32_t *)0xE000E01C)

◆ SYST_CSR

#define SYST_CSR   (*(__IO uint32_t *)0xE000E010)

◆ SYST_CSR_CLKSOURCE_BIT

#define SYST_CSR_CLKSOURCE_BIT   2

◆ SYST_CSR_EN_BIT

#define SYST_CSR_EN_BIT   0

◆ SYST_CSR_TICKINT_BIT

#define SYST_CSR_TICKINT_BIT   1

◆ SYST_CVR

#define SYST_CVR   (*(__IO uint32_t *)0xE000E018)

◆ SYST_RVR

#define SYST_RVR   (*(__IO uint32_t *)0xE000E014)

Function Documentation

◆ delay_ms()

void delay_ms ( uint32_t ms)

Busy-wait delay in milliseconds.

Parameters
msNumber of milliseconds to delay

◆ delay_us()

void delay_us ( uint64_t us)

Busy-wait delay in microseconds.

Parameters
usNumber of microseconds to delay
Note
Minimum delay is one tick period

◆ hal_get_micros()

uint32_t hal_get_micros ( void )

Get system uptime in microseconds.

Returns
Microseconds since startup

◆ hal_get_millis()

uint32_t hal_get_millis ( void )

Get system uptime in milliseconds.

Returns
Milliseconds since startup

◆ hal_get_tick()

uint64_t hal_get_tick ( void )

Get current system tick count.

Returns
Current tick count

◆ hal_get_tick_duration_us()

uint32_t hal_get_tick_duration_us ( void )

Get configured tick duration.

Returns
Tick duration in microseconds

◆ hal_get_tick_reload_value()

uint32_t hal_get_tick_reload_value ( void )

Get SysTick reload value.

Returns
Current reload value (24-bit)

◆ hal_systick_set_callback()

void hal_systick_set_callback ( void(* cb )(void))

◆ SysTick_Handler()

void SysTick_Handler ( void )

SysTick interrupt handler.

Increments the global tick counter

◆ systick_init()

void systick_init ( uint32_t tick_us)

Initialize the SysTick timer.

Parameters
tick_usTick period in microseconds

Configures SysTick to:

  • Use processor clock (AHB)
  • Generate interrupts at specified interval
  • Start counting immediately
    Note
    Reload value is limited to 24 bits

◆ TIM12_IRQHandler()

void TIM12_IRQHandler ( void )

◆ TIM2_IRQHandler()

void TIM2_IRQHandler ( void )

◆ TIM3_IRQHandler()

void TIM3_IRQHandler ( void )

◆ TIM4_IRQHandler()

void TIM4_IRQHandler ( void )

◆ TIM5_IRQHandler()

void TIM5_IRQHandler ( void )

◆ TIM9_IRQHandler()

void TIM9_IRQHandler ( void )

◆ timer_attach_callback()

void timer_attach_callback ( hal_timer_t timer,
void(* callback )(void) )

◆ timer_clear_interrupt_flag()

void timer_clear_interrupt_flag ( hal_timer_t timer)

◆ timer_detach_callback()

void timer_detach_callback ( hal_timer_t timer)

◆ timer_disable_channel()

void timer_disable_channel ( hal_timer_t timer,
uint32_t channel )

◆ timer_disable_interrupt()

void timer_disable_interrupt ( hal_timer_t timer)

◆ timer_enable_channel()

void timer_enable_channel ( hal_timer_t timer,
uint32_t channel )

◆ timer_enable_interrupt()

void timer_enable_interrupt ( hal_timer_t timer)

◆ timer_get_arr()

uint32_t timer_get_arr ( hal_timer_t timer,
uint32_t channel )

◆ timer_get_compare()

uint32_t timer_get_compare ( hal_timer_t timer,
uint32_t channel )

◆ timer_get_count()

uint32_t timer_get_count ( hal_timer_t timer)

◆ timer_get_frequency()

uint32_t timer_get_frequency ( hal_timer_t timer)

◆ timer_init()

void timer_init ( hal_timer_t timer,
uint32_t prescaler,
uint32_t auto_reload )

Initialize timer based on type.

Parameters
timerTimer identifier
prescalerPrescaler value
auto_reloadAuto-reload value

Start timer counter

Parameters
timerTimer identifier

Stop timer counter

Parameters
timerTimer identifier

Set timer compare value for PWM

Parameters
timerTimer identifier
channelChannel number (1-4)
compare_valueCCR register value

Configures PWM mode 1 and enables the channel output

Enable timer channel output

Parameters
timerTimer identifier
channelChannel number (1-4)

Reset timer counter to zero.

Parameters
timerTimer identifier.

Get the current counter value for a timer.

Parameters
timerTimer identifier.
Returns
Current counter value or 0 if invalid timer.

Calculate the timer's current base frequency using PSC and ARR.

Parameters
timerTimer identifier.
Returns
Timer frequency in Hz or 0 if invalid timer.
Note
This reads PSC and ARR directly from timer registers and uses the appropriate APB clock for the timer.

IRQ handler wrapper for TIM2.

Clears the flag and dispatches to the HAL interrupt handler table.

IRQ handler wrapper for TIM3.

IRQ handler wrapper for TIM4.

IRQ handler wrapper for TIM5.

IRQ handler for TIM1 BRK and TIM9 shared vector.

Note
This function clears TIM9's flag and dispatches using the shared IRQn.

Enable timer interrupts (NVIC + DIER UIE) for supported timers.

Parameters
timerTimer identifier.
Note
For TIM1 more complex options exist and are left TODO in the original.

Attach a callback to the timer's HAL interrupt table.

Parameters
timerTimer identifier.
callbackFunction pointer to call when the timer IRQ fires.

Detach a previously attached callback for the given timer.

Parameters
timerTimer identifier.

Set the compare (CCR) register for a timer channel and configure CCMR.

Parameters
timerTimer identifier.
channelChannel number (1-4).
compare_valueValue to write into CCRx.
Note
This function sets PWM mode 1 and enables the channel after writing CCR.

Disable timer channel output

Parameters
timerTimer identifier
channelChannel number (1-4)

◆ timer_reset()

void timer_reset ( hal_timer_t timer)

◆ timer_set_arr()

void timer_set_arr ( hal_timer_t timer,
uint32_t channel,
uint32_t arr )

◆ timer_set_auto_reload()

void timer_set_auto_reload ( hal_timer_t timer,
uint32_t arr )

◆ timer_set_compare()

void timer_set_compare ( hal_timer_t timer,
uint8_t channel,
uint32_t compare_value )

◆ timer_set_prescaler()

void timer_set_prescaler ( hal_timer_t timer,
uint32_t prescaler )

◆ timer_start()

void timer_start ( hal_timer_t timer)

◆ timer_stop()

void timer_stop ( hal_timer_t timer)