174 lines
5.6 KiB
C
174 lines
5.6 KiB
C
#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
|
||
*/
|
||
float 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
|