Skyward boardcore
Loading...
Searching...
No Matches
Boardcore::BasicTimer Class Reference

Driver for STM32 basic timers. More...

#include <BasicTimer.h>

Inheritance diagram for Boardcore::BasicTimer:

Public Member Functions

 BasicTimer (TIM_TypeDef *timer)
 Create a BasicTimer object. Note that this does not resets the timer configuration but automatically enables the timer peripheral clock.
 
 ~BasicTimer ()
 Disables the peripheral clock.
 
TIM_TypeDef * getTimer ()
 
uint8_t getTimerNumber ()
 
virtual void reset ()
 Resets the timer configuration to the default state.
 
virtual void enable ()
 
virtual void disable ()
 
virtual bool isEnabled () final
 
virtual void enableAutoReloadPreload () final
 The auto reload register is buffered.
 
virtual void disableAutoReloadPreload () final
 Tha auto reload register is not buffered.
 
virtual void enableUpdateEventGeneration () final
 When enabled, the UEV is generated by the counter overflow and software UEV generation.
 
virtual void disableUpdateEventGeneration () final
 The UEV is disabled.
 
virtual void generateUpdate () final
 Re-initializes the timer counter and generate an update of the registers (the prescaler is cleared too).
 
uint16_t readCounter ()
 
void setCounter (uint16_t counterValue)
 
virtual uint16_t readPrescaler () final
 
virtual void setPrescaler (uint16_t prescalerValue) final
 Updated the prescaler value.
 
virtual int getFrequency () final
 
virtual void setFrequency (int frequency) final
 Allows to set directly the frequency of the timer's clock.
 
uint16_t readAutoReloadRegister ()
 
void setAutoReloadRegister (uint16_t autoReloadValue)
 
virtual void enableUpdateInterrupt () final
 
virtual void disableUpdateInterrupt () final
 
virtual void enableUpdateDMARequest () final
 
virtual void disableUpdateDMARequest () final
 
virtual void enableOnePulseMode () final
 
virtual void disableOnePulseMode () final
 
virtual void enableUGInterruptAndDMA () final
 
virtual void disableUGInterruptAndDMA () final
 
virtual void setMasterMode (TimerUtils::MasterMode masterMode)
 

Static Public Member Functions

static void clearUpdateInterruptFlag (TIM_TypeDef *timer)
 

Protected Attributes

TIM_TypeDef * timer
 

Detailed Description

Driver for STM32 basic timers.

This driver applies to the whole STM32F4xx family.

Basic timers main features are:

  • 16bit auto-reload upcounter
  • 16bit programmable prescaler used to divide (also "on the fly") the counter clock frequency by any factor between 1 and 65536
  • Interrupt/DMA generation on the update event

TIM6 and TIM7 are basic timers.

You can use any other timer as a basic timer. However TIM9 to TIM 14 can't generate DMA requests.

The main block of the programmable timer is a 16-bit upcounter which is incremented every clock cycle, the clock frequency can be divided by a 16-bit prescaler and the counter resets when it reaches the auto-reload value.

Every time the counter reaches the auto-reload value, an UPDATE EVENT (UEV) is fired and the counter is reset to 0. You can also generate the UEV by software.

The counter is working only when the prescaler is active, thus receiving the clock signal.

The auto-reload register can be preloaded, meaning that there you can use a preload register which acts as a buffer. If enabled, when you change the auto-reload register, its content is transferred into the shadow register (they became active) at each UEV, otherwise the new value takes effect immediately.

You can change on the fly the prescaler value as well as the auto-reload register and the counter.

When the UEV occurs, all the registers are updated and the update flag is set:

  • The buffer of the prescaler is reloaded with the preload value (PSC)
  • The auto-reload shadow register is updated with the preload value (ARR)

The clock source is provided by the internal clock source. For STM32F4s they are:

  • APB1: TIM2-7/12-15
  • APB2: TIM1/8-11

Definition at line 78 of file BasicTimer.h.

Constructor & Destructor Documentation

◆ BasicTimer()

Boardcore::BasicTimer::BasicTimer ( TIM_TypeDef *  timer)
inlineexplicit

Create a BasicTimer object. Note that this does not resets the timer configuration but automatically enables the timer peripheral clock.

Definition at line 207 of file BasicTimer.h.

◆ ~BasicTimer()

Boardcore::BasicTimer::~BasicTimer ( )
inline

Disables the peripheral clock.

Definition at line 212 of file BasicTimer.h.

Member Function Documentation

◆ clearUpdateInterruptFlag()

void Boardcore::BasicTimer::clearUpdateInterruptFlag ( TIM_TypeDef *  timer)
inlinestatic

Definition at line 363 of file BasicTimer.h.

◆ disable()

void Boardcore::BasicTimer::disable ( )
inlinevirtual

◆ disableAutoReloadPreload()

void Boardcore::BasicTimer::disableAutoReloadPreload ( )
inlinefinalvirtual

Tha auto reload register is not buffered.

This means that when you change the auto-reload register, its value is taken into account immediately.

Definition at line 271 of file BasicTimer.h.

◆ disableOnePulseMode()

void Boardcore::BasicTimer::disableOnePulseMode ( )
inlinefinalvirtual

Definition at line 338 of file BasicTimer.h.

◆ disableUGInterruptAndDMA()

void Boardcore::BasicTimer::disableUGInterruptAndDMA ( )
inlinefinalvirtual

Definition at line 345 of file BasicTimer.h.

◆ disableUpdateDMARequest()

void Boardcore::BasicTimer::disableUpdateDMARequest ( )
inlinefinalvirtual

Definition at line 331 of file BasicTimer.h.

◆ disableUpdateEventGeneration()

void Boardcore::BasicTimer::disableUpdateEventGeneration ( )
inlinefinalvirtual

The UEV is disabled.

However the generateUpdate() function still works.

Definition at line 281 of file BasicTimer.h.

◆ disableUpdateInterrupt()

void Boardcore::BasicTimer::disableUpdateInterrupt ( )
inlinefinalvirtual

Definition at line 321 of file BasicTimer.h.

◆ enable()

void Boardcore::BasicTimer::enable ( )
inlinevirtual

◆ enableAutoReloadPreload()

void Boardcore::BasicTimer::enableAutoReloadPreload ( )
inlinefinalvirtual

The auto reload register is buffered.

This means that the shadow register is used and the auto reload value will became active at the next UEV.

Definition at line 266 of file BasicTimer.h.

◆ enableOnePulseMode()

void Boardcore::BasicTimer::enableOnePulseMode ( )
inlinefinalvirtual

Definition at line 336 of file BasicTimer.h.

◆ enableUGInterruptAndDMA()

void Boardcore::BasicTimer::enableUGInterruptAndDMA ( )
inlinefinalvirtual

Definition at line 340 of file BasicTimer.h.

◆ enableUpdateDMARequest()

void Boardcore::BasicTimer::enableUpdateDMARequest ( )
inlinefinalvirtual

Definition at line 326 of file BasicTimer.h.

◆ enableUpdateEventGeneration()

void Boardcore::BasicTimer::enableUpdateEventGeneration ( )
inlinefinalvirtual

When enabled, the UEV is generated by the counter overflow and software UEV generation.

Definition at line 276 of file BasicTimer.h.

◆ enableUpdateInterrupt()

void Boardcore::BasicTimer::enableUpdateInterrupt ( )
inlinefinalvirtual

Definition at line 319 of file BasicTimer.h.

◆ generateUpdate()

void Boardcore::BasicTimer::generateUpdate ( )
inlinefinalvirtual

Re-initializes the timer counter and generate an update of the registers (the prescaler is cleared too).

Definition at line 286 of file BasicTimer.h.

◆ getFrequency()

int Boardcore::BasicTimer::getFrequency ( )
inlinefinalvirtual

Definition at line 302 of file BasicTimer.h.

◆ getTimer()

TIM_TypeDef * Boardcore::BasicTimer::getTimer ( )
inline

Definition at line 214 of file BasicTimer.h.

◆ getTimerNumber()

uint8_t Boardcore::BasicTimer::getTimerNumber ( )
inline

Definition at line 216 of file BasicTimer.h.

◆ isEnabled()

bool Boardcore::BasicTimer::isEnabled ( )
inlinefinalvirtual

Definition at line 264 of file BasicTimer.h.

◆ readAutoReloadRegister()

uint16_t Boardcore::BasicTimer::readAutoReloadRegister ( )
inline

Definition at line 312 of file BasicTimer.h.

◆ readCounter()

uint16_t Boardcore::BasicTimer::readCounter ( )
inline

Definition at line 288 of file BasicTimer.h.

◆ readPrescaler()

uint16_t Boardcore::BasicTimer::readPrescaler ( )
inlinefinalvirtual

Definition at line 295 of file BasicTimer.h.

◆ reset()

void Boardcore::BasicTimer::reset ( )
inlinevirtual

Resets the timer configuration to the default state.

This means that:

  • Auto reload register is not buffered, thus when you modify its value it is taken into effect immediately
  • One pulse mode disabled
  • UEV and UG can trigger interrupt and DMA
  • UEV generation (UG) is enabled
  • The counter is disabled
  • Master mode reset
  • Interrupt and DMA request generation disabled
  • Counter and prescaler set to 0
  • Auto reload register set to 65535 (2^16-1)

Reimplemented in Boardcore::GeneralPurposeTimer< T >, and Boardcore::GeneralPurposeTimer< uint16_t >.

Definition at line 250 of file BasicTimer.h.

◆ setAutoReloadRegister()

void Boardcore::BasicTimer::setAutoReloadRegister ( uint16_t  autoReloadValue)
inline

Definition at line 314 of file BasicTimer.h.

◆ setCounter()

void Boardcore::BasicTimer::setCounter ( uint16_t  counterValue)
inline

Definition at line 290 of file BasicTimer.h.

◆ setFrequency()

void Boardcore::BasicTimer::setFrequency ( int  frequency)
inlinefinalvirtual

Allows to set directly the frequency of the timer's clock.

Parameters
frequencyTarget frequency for the timer's clock.

Definition at line 307 of file BasicTimer.h.

◆ setMasterMode()

void Boardcore::BasicTimer::setMasterMode ( TimerUtils::MasterMode  masterMode)
inlinevirtual

◆ setPrescaler()

void Boardcore::BasicTimer::setPrescaler ( uint16_t  prescalerValue)
inlinefinalvirtual

Updated the prescaler value.

Keep in mind that the new prescaler value is taken into account only at the next update event. If you need to change it immediately you need to call generateUpdate() and make sure that UEV generation is enabled (which is by default).

Definition at line 297 of file BasicTimer.h.

Member Data Documentation

◆ timer

TIM_TypeDef* Boardcore::BasicTimer::timer
protected

Definition at line 204 of file BasicTimer.h.


The documentation for this class was generated from the following file: