130 lines
4.1 KiB
C
130 lines
4.1 KiB
C
#ifndef TIMER_H
|
|
#define TIMER_H
|
|
|
|
#include "stm32f103xb.h"
|
|
|
|
/****************************************************************************
|
|
* 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é
|
|
* @note Fonction à lancer avant toute autre. Le timer n'est pas encore lancé (voir MyTimerStart)
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
|
* int Arr : valeur à placer dans ARR
|
|
* int Psc : valeur à placer dans PSC
|
|
* @retval None
|
|
*/
|
|
void Timer_conf(TIM_TypeDef * timer, int arr, int psc);
|
|
|
|
|
|
/**
|
|
* @brief Démarre le timer considéré
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4
|
|
* @retval None
|
|
*/
|
|
void Timer_start(TIM_TypeDef * timer);
|
|
|
|
|
|
/**
|
|
* @brief Arrêt le timer considéré
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomè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 channel);
|
|
|
|
/****************************************************************************
|
|
* PWM OUTPUT
|
|
***************************************************************************/
|
|
|
|
/**
|
|
* @brief Configure le timer en mode PWM output à la fréquence donnée
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* int channel : Le channel utilisé par la PWM
|
|
* float freq : Fré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équence des PWMs associées au timer donné
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* float freq : Fré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 à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* int channel : Le channel utilisé 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ère le duty cycle de la PWM
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* int channel : Le channel utilisé 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 à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* @retval None
|
|
*/
|
|
void Timer_encoder_conf(TIM_TypeDef * timer);
|
|
|
|
/**
|
|
* @brief Récupère l'angle, en degrès
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* @retval None
|
|
*/
|
|
int Timer_encoder_getAngle(TIM_TypeDef * timer);
|
|
|
|
/**
|
|
* @brief Récupère la direction
|
|
* @note
|
|
* @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4
|
|
* @retval None
|
|
*/
|
|
int Timer_encoder_getDirection(TIM_TypeDef * timer);
|
|
|
|
#endif
|