projet_voilier/MyDrivers/Timer.h
Arnaud Vergnet 4e69b9b112 improve doc
2020-11-15 16:53:55 +01:00

174 lines
5.6 KiB
C
Raw Blame History

#ifndef TIMER_H
#define TIMER_H
#include "stm32f103xb.h"
#include "stm32f1xx_ll_tim.h" // Pour les timers
enum CounterDirection {
CLOCKWISE = LL_TIM_COUNTERDIRECTION_UP,
COUNTER_CLOCKWISE = LL_TIM_COUNTERDIRECTION_DOWN,
};
/****************************************************************************
* INTERRUPTIONS
***************************************************************************/
/**
* @brief Autorise les interruptions
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
void Timer_IT_enable(TIM_TypeDef * timer);
/**
* @brief Interdit les interruptions
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
void Timer_IT_disable(TIM_TypeDef * timer);
/**
* @brief Configure le Timer consid<69>r<EFBFBD> en interruption sur d<>bordement.
* @note A ce stade, les interruptions ne sont pas valid<69>s (voir MyTimer_IT_Enable )
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* void (*IT_function) (void) : nom (adresse) de la fonction <20> lancer sur interruption
* int Prio : priorit<69> associ<63>e <20> l'interruption
* @retval None
*/
void Timer_IT_conf(TIM_TypeDef * timer, void (*it_callback) (void), int prio);
/****************************************************************************
* TIMER
***************************************************************************/
/**
* @brief Démarre le timer considéré
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
void Timer_start(TIM_TypeDef * timer);
/**
* @brief Arrête le timer considéré
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
void Timer_stop(TIM_TypeDef * timer);
/**
* @brief Active l'horloge et regle l'ARR et le PSC du timer visé
* @param TIM_TypeDef Timer : indique le timer à utiliser
* int Arr : valeur à placer dans ARR
* int Psc : valeur à placer dans PSC
* @retval None
*/
void Timer_conf(TIM_TypeDef * timer, int arr, int psc);
/****************************************************************************
* PWM INPUT
***************************************************************************/
/**
* @brief Configure le timer en mode PWM input
* @note
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
* int channel : Le channel utilisé par la PWM
* @retval None
*/
void Timer_pwmi_conf(TIM_TypeDef * timer, int channel);
/**
* @brief Récupère le duty cycle de la PWM donnée
* @note
* @param TIM_TypeDef Timer : indique le timer à utiliser
* @retval None
*/
int Timer_pwmi_getDutyCycle(TIM_TypeDef * timer);
/**
* @brief Récupère la période de la PWM donnée
* @note
* @param TIM_TypeDef Timer : indique le timer à utiliser
* @retval None
*/
int Timer_pwmi_getPeriod(TIM_TypeDef * timer);
/****************************************************************************
* PWM OUTPUT
***************************************************************************/
/**
* @brief Configure le timer en mode PWM output <20> la fr<66>quence donn<6E>e
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* int channel : Le channel utilis<69> par la PWM
* float freq : Fr<46>quence en Hz (entre 2Hz et pas trop grand svp)
* float dutyCycle : Valeur entre 0 et 1
* @retval None
*/
void Timer_pwmo_conf(TIM_TypeDef * timer, int channel, float freq, float dutyCycle);
/**
* @brief Modifie la fr<66>quence des PWMs associ<63>es au timer donn<6E>
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* float freq : Fr<46>quence en Hz (entre 2Hz et pas trop grand svp)
* @retval None
*/
void Timer_pwmo_setFreq(TIM_TypeDef * timer, float freq);
/**
* @brief Modifie le duty cycle de la PWM
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* int channel : Le channel utilis<69> par la PWM
* float dutyCycle : Valeur entre 0 et 1
* @retval None
*/
void Timer_pwmo_setDutyCycle(TIM_TypeDef * timer, int channel, float dutyCycle);
/**
* @brief R<>cup<75>re le duty cycle de la PWM
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* int channel : Le channel utilis<69> par la PWM
* @retval float dutyCycle
*/
float Timer_pwmo_getDutyCycle(TIM_TypeDef * timer, int channel);
/****************************************************************************
* ENCODER
***************************************************************************/
/**
* @brief Configure le timer en mode encoder
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
void Timer_encoder_conf(TIM_TypeDef * timer);
/**
* @brief R<>cup<75>re l'angle, en degr<67>s
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
int Timer_encoder_getAngle(TIM_TypeDef * timer);
/**
* @brief R<>cup<75>re la direction
* @note
* @param TIM_TypeDef Timer : indique le timer <20> utiliser : TIM1, TIM2, TIM3 ou TIM4
* @retval None
*/
enum CounterDirection Timer_encoder_getDirection(TIM_TypeDef * timer);
#endif