#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 � utiliser par le chronom�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 � utiliser par le chronom�tre, TIM1, TIM2, TIM3 ou TIM4 * @retval None */ void Timer_IT_disable(TIM_TypeDef * timer); /** * @brief Configure le Timer consid�r� en interruption sur d�bordement. * @note A ce stade, les interruptions ne sont pas valid�s (voir MyTimer_IT_Enable ) * @param TIM_TypeDef Timer : indique le timer � utiliser par le chronom�tre, TIM1, TIM2, TIM3 ou TIM4 * void (*IT_function) (void) : nom (adresse) de la fonction � lancer sur interruption * int Prio : priorit� associ�e � 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 � utiliser par le chronom�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 � utiliser par le chronom�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 � 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 */ enum CounterDirection Timer_encoder_getDirection(TIM_TypeDef * timer); #endif