Skyward boardcore
Loading...
Searching...
No Matches
Boardcore::GeneralPurposeTimer< T > Class Template Referencefinal

Driver for STM32 general purpose timers. More...

#include <GeneralPurposeTimer.h>

Inheritance diagram for Boardcore::GeneralPurposeTimer< T >:
Collaboration diagram for Boardcore::GeneralPurposeTimer< T >:

Public Member Functions

 GeneralPurposeTimer (TIM_TypeDef *timer)
 Create a GeneralPurposeTimer object. Note that this does not resets the timer configuration but automatically enables the timer peripheral clock.
 
 ~GeneralPurposeTimer ()
 Disables the peripheral clock.
 
void reset () override
 Resets the timer configuration to the default state.
 
void enable () override
 
void disable () override
 
readCounter ()
 
void setCounter (T counterValue)
 
readAutoReloadRegister ()
 
void setAutoReloadRegister (T autoReloadValue)
 
void setMasterMode (TimerUtils::MasterMode masterMode) override
 
void setSlaveMode (TimerUtils::SlaveMode slaveMode)
 
void setTriggerSource (TimerUtils::TriggerSource triggerSource)
 
void enableTriggerInterrupt ()
 
void disableTriggerInterrupt ()
 
void enableCaptureCompareInterrupt (TimerUtils::Channel channel)
 
void disableCaptureCompareInterrupt (TimerUtils::Channel channel)
 
void enableCaptureCompareDMARequest (TimerUtils::Channel channel)
 
void disableCaptureCompareDMARequest (TimerUtils::Channel channel)
 
void generateTrigger ()
 
void generateCaptureCompareEvent (TimerUtils::Channel channel)
 
void enableCaptureComparePreload (TimerUtils::Channel channel)
 The capture/compare register is buffered.
 
void disableCaptureComparePreload (TimerUtils::Channel channel)
 The capture/compare register is not buffered.
 
void setOutputCompareMode (TimerUtils::Channel channel, TimerUtils::OutputCompareMode modeChannel)
 
void enableCaptureCompareOutput (TimerUtils::Channel channel)
 
void enableCaptureCompareComplementaryOutput (TimerUtils::Channel channel)
 
void disableCaptureCompareOutput (TimerUtils::Channel channel)
 
void disableCaptureCompareComplementaryOutput (TimerUtils::Channel channel)
 
bool isCaptureCompareOutputEnabled (TimerUtils::Channel channel)
 
bool isCaptureCompareComplementaryOutputEnabled (TimerUtils::Channel channel)
 
void setCaptureComparePolarity (TimerUtils::Channel channel, TimerUtils::OutputComparePolarity polarity)
 
void setCaptureCompareComplementaryPolarity (TimerUtils::Channel channel, TimerUtils::OutputComparePolarity polarity)
 
void setCaptureCompareRegister (TimerUtils::Channel channel, T value)
 
readCaptureCompareRegister (TimerUtils::Channel channel)
 
void clearTriggerInterruptFlag ()
 
void clearCaptureCompareInterruptFlag (TimerUtils::Channel channel)
 
- Public Member Functions inherited from Boardcore::BasicTimer
 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 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
 

Additional Inherited Members

- Static Public Member Functions inherited from Boardcore::BasicTimer
static void clearUpdateInterruptFlag (TIM_TypeDef *timer)
 
- Protected Attributes inherited from Boardcore::BasicTimer
TIM_TypeDef * timer
 

Detailed Description

template<typename T>
class Boardcore::GeneralPurposeTimer< T >

Driver for STM32 general purpose timers.

This driver applies to the whole STM32F4xx family.

General purpose 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
  • Up to 4 independent channels for:
    • Input capture
    • Output compare
    • PWM genration (edge-aligned mode)
    • One-pulse mode output
  • Synchronization circuit to control the timer with external signals and to interconnect several timers together
  • Interrupt generation on the following events:
    • Update: counter overflow, counter initialization (by software of internal trigger)
    • Trigger event (counter start, stop, initialization or count by internal trigger)
    • Input capture
    • Ouput compare

TIM2 to TIM5 and TIM9 to TIM14 are general purpose timers.

You can use 32bit general purpose timers and advance timers as general purpose timers.

Although general purpose timers are called the same, there are slight differences in features:

  • TIM9 and TIM12 have only two channels
  • TIM10/11/13/14 have only one channel, do not offer synchronization circuit and interrupt can't be generated from trigger events

For a basic introduction to timers read BasicTimer description. For a more exhaustive explanation and feature list study the reference manual!

The counter clock can be provided by the following clock sources:

  • Internal clock
  • External clock mode 1 (for TIM9 and TIM12): external input pin
  • Internal trigger inputs (for TIM9 and TIM12): connecting the trigger output from another timer

The internal clock source is the default clock source. For TIM9 and TIM12 the internal clock source is selected when the slave mode controller is disabled.

In External clock mode 1 the counter can count at each rising or falling edge on a selected input.

Output compare mode function is used to control an output waveform or indicating when a period of timer has elapse. When a match is found between the capture/compare register and the counter, the compare function outputs the value defined by the output compare mode.

PWM mode allows the user to generate a PWM signal with a specific frequency and duty cycle.

TODO: Gated mode

TODO: Timer synchronization

Other timer functionalities still needs to be implemented.

Definition at line 98 of file GeneralPurposeTimer.h.

Constructor & Destructor Documentation

◆ GeneralPurposeTimer()

template<typename T >
Boardcore::GeneralPurposeTimer< T >::GeneralPurposeTimer ( TIM_TypeDef * timer)
inlineexplicit

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

Definition at line 224 of file GeneralPurposeTimer.h.

◆ ~GeneralPurposeTimer()

template<typename T >
Boardcore::GeneralPurposeTimer< T >::~GeneralPurposeTimer ( )
inline

Disables the peripheral clock.

Definition at line 230 of file GeneralPurposeTimer.h.

Member Function Documentation

◆ clearCaptureCompareInterruptFlag()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::clearCaptureCompareInterruptFlag ( TimerUtils::Channel channel)
inline

Definition at line 574 of file GeneralPurposeTimer.h.

◆ clearTriggerInterruptFlag()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::clearTriggerInterruptFlag ( )
inline

Definition at line 568 of file GeneralPurposeTimer.h.

◆ disable()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disable ( )
inlineoverridevirtual

Reimplemented from Boardcore::BasicTimer.

Definition at line 270 of file GeneralPurposeTimer.h.

◆ disableCaptureCompareComplementaryOutput()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableCaptureCompareComplementaryOutput ( TimerUtils::Channel channel)
inline

Same as non complementary outputs but their idle state is high.

Definition at line 491 of file GeneralPurposeTimer.h.

◆ disableCaptureCompareDMARequest()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableCaptureCompareDMARequest ( TimerUtils::Channel channel)
inline

Definition at line 371 of file GeneralPurposeTimer.h.

◆ disableCaptureCompareInterrupt()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableCaptureCompareInterrupt ( TimerUtils::Channel channel)
inline

Definition at line 357 of file GeneralPurposeTimer.h.

◆ disableCaptureCompareOutput()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableCaptureCompareOutput ( TimerUtils::Channel channel)
inline

Note that after the output is disabled, its level is then function of MOE, OSSI, OSSR, OIS1, OIS1N and CC1NE bits for timers TIM1 and TIM8.

Practically disabled, so low state.

Definition at line 484 of file GeneralPurposeTimer.h.

◆ disableCaptureComparePreload()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableCaptureComparePreload ( TimerUtils::Channel channel)
inline

The capture/compare register is not buffered.

This means that when you change the capture/compare register, its value is taken into account immediately.

Definition at line 412 of file GeneralPurposeTimer.h.

◆ disableTriggerInterrupt()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::disableTriggerInterrupt ( )
inline

Definition at line 344 of file GeneralPurposeTimer.h.

◆ enable()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enable ( )
inlineoverridevirtual

Reimplemented from Boardcore::BasicTimer.

Definition at line 259 of file GeneralPurposeTimer.h.

◆ enableCaptureCompareComplementaryOutput()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableCaptureCompareComplementaryOutput ( TimerUtils::Channel channel)
inline

Definition at line 477 of file GeneralPurposeTimer.h.

◆ enableCaptureCompareDMARequest()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableCaptureCompareDMARequest ( TimerUtils::Channel channel)
inline

Definition at line 364 of file GeneralPurposeTimer.h.

◆ enableCaptureCompareInterrupt()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableCaptureCompareInterrupt ( TimerUtils::Channel channel)
inline

Definition at line 350 of file GeneralPurposeTimer.h.

◆ enableCaptureCompareOutput()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableCaptureCompareOutput ( TimerUtils::Channel channel)
inline

Definition at line 470 of file GeneralPurposeTimer.h.

◆ enableCaptureComparePreload()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableCaptureComparePreload ( TimerUtils::Channel channel)
inline

The capture/compare register is buffered.

This means that the shadow register is used and the capture/compare value will became active at the next UEV.

Definition at line 391 of file GeneralPurposeTimer.h.

◆ enableTriggerInterrupt()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::enableTriggerInterrupt ( )
inline

Definition at line 338 of file GeneralPurposeTimer.h.

◆ generateCaptureCompareEvent()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::generateCaptureCompareEvent ( TimerUtils::Channel channel)
inline

Definition at line 384 of file GeneralPurposeTimer.h.

◆ generateTrigger()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::generateTrigger ( )
inline

Definition at line 378 of file GeneralPurposeTimer.h.

◆ isCaptureCompareComplementaryOutputEnabled()

template<typename T >
bool Boardcore::GeneralPurposeTimer< T >::isCaptureCompareComplementaryOutputEnabled ( TimerUtils::Channel channel)
inline

Definition at line 505 of file GeneralPurposeTimer.h.

◆ isCaptureCompareOutputEnabled()

template<typename T >
bool Boardcore::GeneralPurposeTimer< T >::isCaptureCompareOutputEnabled ( TimerUtils::Channel channel)
inline

Definition at line 498 of file GeneralPurposeTimer.h.

◆ readAutoReloadRegister()

template<typename T >
T Boardcore::GeneralPurposeTimer< T >::readAutoReloadRegister ( )
inline

Definition at line 293 of file GeneralPurposeTimer.h.

◆ readCaptureCompareRegister()

template<typename T >
T Boardcore::GeneralPurposeTimer< T >::readCaptureCompareRegister ( TimerUtils::Channel channel)
inline

Definition at line 549 of file GeneralPurposeTimer.h.

◆ readCounter()

template<typename T >
T Boardcore::GeneralPurposeTimer< T >::readCounter ( )
inline

Definition at line 281 of file GeneralPurposeTimer.h.

◆ reset()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::reset ( )
inlineoverridevirtual

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 from Boardcore::BasicTimer.

Definition at line 236 of file GeneralPurposeTimer.h.

◆ setAutoReloadRegister()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setAutoReloadRegister ( T autoReloadValue)
inline

Definition at line 299 of file GeneralPurposeTimer.h.

◆ setCaptureCompareComplementaryPolarity()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setCaptureCompareComplementaryPolarity ( TimerUtils::Channel channel,
TimerUtils::OutputComparePolarity polarity )
inline

Definition at line 520 of file GeneralPurposeTimer.h.

◆ setCaptureComparePolarity()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setCaptureComparePolarity ( TimerUtils::Channel channel,
TimerUtils::OutputComparePolarity polarity )
inline

Definition at line 512 of file GeneralPurposeTimer.h.

◆ setCaptureCompareRegister()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setCaptureCompareRegister ( TimerUtils::Channel channel,
T value )
inline

Definition at line 528 of file GeneralPurposeTimer.h.

◆ setCounter()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setCounter ( T counterValue)
inline

Definition at line 287 of file GeneralPurposeTimer.h.

◆ setMasterMode()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setMasterMode ( TimerUtils::MasterMode masterMode)
inlineoverridevirtual

Reimplemented from Boardcore::BasicTimer.

Definition at line 305 of file GeneralPurposeTimer.h.

◆ setOutputCompareMode()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setOutputCompareMode ( TimerUtils::Channel channel,
TimerUtils::OutputCompareMode modeChannel )
inline

Definition at line 433 of file GeneralPurposeTimer.h.

◆ setSlaveMode()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setSlaveMode ( TimerUtils::SlaveMode slaveMode)
inline

Definition at line 316 of file GeneralPurposeTimer.h.

◆ setTriggerSource()

template<typename T >
void Boardcore::GeneralPurposeTimer< T >::setTriggerSource ( TimerUtils::TriggerSource triggerSource)
inline

Definition at line 327 of file GeneralPurposeTimer.h.


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