projet_voilier/MyDrivers/Timer.h
2020-11-16 18:42:10 +01:00

139 lines
4.4 KiB
C
Raw Permalink 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
***************************************************************************/
void Timer_IT_enable(TIM_TypeDef * timer);
void Timer_IT_disable(TIM_TypeDef * timer);
void Timer_IT_conf(TIM_TypeDef * timer, void (*it_callback) (void), int prio);
/****************************************************************************
* TIMER
***************************************************************************/
/**
* @brief Active l'horloge et r<>gle l'ARR et le PSC du timer vis<69>
* @note Fonction <20> lancer avant toute autre. Le timer n'est pas encore lanc<6E> (voir MyTimerStart)
* @param TIM_TypeDef Timer : indique le timer <20> utiliser par le chronom<6F>tre, TIM1, TIM2, TIM3 ou TIM4
* int Arr : valeur <20> placer dans ARR
* int Psc : valeur <20> placer dans PSC
* @retval None
*/
void Timer_conf(TIM_TypeDef * timer, int arr, int psc);
/**
* @brief D<>marre le timer consid<69>r<EFBFBD>
* @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<72>t le timer consid<69>r<EFBFBD>
* @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);
/****************************************************************************
* PWM INPUT
***************************************************************************/
void PWMi_conf(TIM_TypeDef * timer, int channel);
float PWMi_getDutyCycle(TIM_TypeDef * timer);
int PWMi_getPeriod(TIM_TypeDef * TIMx);
/****************************************************************************
* 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