139 lines
4.4 KiB
C
139 lines
4.4 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
|
||
***************************************************************************/
|
||
|
||
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);
|
||
|
||
int 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
|