diff --git a/MyDrivers/GPIO.c b/MyDrivers/GPIO.c index 93bf04a..b5fccc2 100644 --- a/MyDrivers/GPIO.c +++ b/MyDrivers/GPIO.c @@ -1,2 +1,35 @@ #include "GPIO.h" +#include "stm32f1xx_ll_gpio.h" +void GPIO_conf(GPIO_TypeDef * GPIOx, uint32_t PINx, uint32_t mode, uint32_t outputType, uint32_t pullMode){ + + LL_GPIO_InitTypeDef init; + + //Activation de l'horloge + if (GPIOx == GPIOA) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + else if (GPIOx == GPIOB) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOB); + else if (GPIOx == GPIOC) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOC); + else if (GPIOx == GPIOD) LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOD); + + //Configuration du PIN + LL_GPIO_StructInit(&init); + init.Pin = PINx; + init.Mode = mode; + //init.Speed = ; + init.OutputType = outputType; + init.Pull = pullMode; + LL_GPIO_Init(GPIOx, &init); +} + +void GPIO_setPin(GPIO_TypeDef * GPIOx, uint32_t PINx, int output){ + + if (output) LL_GPIO_SetOutputPin(GPIOx, PINx); + else LL_GPIO_ResetOutputPin(GPIOx,PINx); + +}; + +int GPIO_readPin(GPIO_TypeDef * GPIOx, uint32_t PINx){ + + return LL_GPIO_IsOutputPinSet(GPIOx, PINx); + +} diff --git a/MyDrivers/GPIO.h b/MyDrivers/GPIO.h index 8e3c489..c8e51fb 100644 --- a/MyDrivers/GPIO.h +++ b/MyDrivers/GPIO.h @@ -1,4 +1,23 @@ #ifndef GPIO_H #define GPIO_H +#include "stm32f103xb.h" +#include "stm32f1xx_ll_gpio.h" +#include "stm32f1xx_ll_bus.h" + + +/** + * @brief Configure le GPIO considéré + * @note + * @param GPIO_TypeDef * GPIOx indique le GPIO à configurer : GPIOA, GPIOB, GPIOC ou GPIOD + uint32_t PINx indique le PIN à configurer, sous la forme LL_GPIO_PIN_x + Pour une liste des modes disponibles, consulter la librairie LL + * @retval None + */ +void GPIO_conf(GPIO_TypeDef * GPIOx, uint32_t PINx, uint32_t mode, uint32_t outputType, uint32_t pullMode); + +void GPIO_setPin(GPIO_TypeDef * GPIOx, uint32_t PINx, int output); + +int GPIO_readPin(GPIO_TypeDef * GPIOx, uint32_t PINx); + #endif diff --git a/MyDrivers/Timer.c b/MyDrivers/Timer.c index e969778..55bf6d8 100644 --- a/MyDrivers/Timer.c +++ b/MyDrivers/Timer.c @@ -4,11 +4,11 @@ /**************************************************************************** - * INTERRUPTIONS + * INTERRUPTIONS ***************************************************************************/ -// variable pointeur de fonction permettant de mémoriser le callback à appeler depuis +// variable pointeur de fonction permettant de m�moriser le callback � appeler depuis // le handler d'IT void (*it_callback_TIM1)(void); void (*it_callback_TIM2)(void); @@ -47,10 +47,10 @@ void TIM4_IRQHandler(void) /** * @brief Autorise les interruptions - * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 - * @retval None - */ + * @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) { LL_TIM_EnableIT_UPDATE(timer); @@ -59,23 +59,23 @@ 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 - */ + * @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) { LL_TIM_DisableIT_UPDATE(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 - */ + * @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) { // affectation de la fonction @@ -85,7 +85,7 @@ void Timer_IT_conf(TIM_TypeDef * timer, void (*it_callback) (void), int prio) else it_callback_TIM4 = it_callback; - // Blocage IT (il faudra la débloquer voir fct suivante) + // Blocage IT (il faudra la d�bloquer voir fct suivante) LL_TIM_DisableIT_UPDATE(timer); // validation du canal NVIC @@ -103,39 +103,39 @@ void Timer_IT_conf(TIM_TypeDef * timer, void (*it_callback) (void), int prio) } /**************************************************************************** - * TIMER + * TIMER ***************************************************************************/ /** - * @brief Démarre le timer considéré et active les interruptions - * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 - * @retval None - */ + * @brief D�marre le timer consid�r� et active les interruptions + * @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) { LL_TIM_EnableCounter(timer); } /** - * @brief Arrêt le timer considéré et désactive les interruptions - * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 - * @retval None - */ + * @brief Arr�t le timer consid�r� et d�sactive les interruptions + * @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) { LL_TIM_DisableCounter(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 Timer_start) - * @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 - */ + * @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 Timer_start) + * @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) { LL_TIM_InitTypeDef init_struct; @@ -163,12 +163,12 @@ void Timer_conf(TIM_TypeDef * timer, int arr, int psc) } /**************************************************************************** - * PWM INPUT + * PWM INPUT ***************************************************************************/ /**************************************************************************** - * PWM OUTPUT + * PWM OUTPUT ***************************************************************************/ int getArrFromFreq(float freq) @@ -218,7 +218,7 @@ float Timer_pwmo_getDutyCycle(TIM_TypeDef * timer, int channel) } /**************************************************************************** - * ENCODER + * ENCODER ***************************************************************************/ void Timer_encoder_conf(TIM_TypeDef * timer) diff --git a/MyDrivers/Timer.h b/MyDrivers/Timer.h index 6580262..cc484f7 100644 --- a/MyDrivers/Timer.h +++ b/MyDrivers/Timer.h @@ -11,7 +11,7 @@ enum CounterDirection { /**************************************************************************** - * INTERRUPTIONS + * INTERRUPTIONS ***************************************************************************/ void Timer_IT_enable(TIM_TypeDef * timer); @@ -22,41 +22,41 @@ void Timer_IT_conf(TIM_TypeDef * timer, void (*it_callback) (void), int prio); /**************************************************************************** - * TIMER + * 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 - */ + * @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 - */ + * @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 - */ + * @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 + * PWM INPUT ***************************************************************************/ void PWMi_conf(TIM_TypeDef * timer, int channel); @@ -64,25 +64,25 @@ void PWMi_conf(TIM_TypeDef * timer, int channel); int PWMi_getDutyCycle(TIM_TypeDef * timer, int channel); /**************************************************************************** - * PWM OUTPUT + * PWM OUTPUT ***************************************************************************/ /** - * @brief Configure le timer en mode PWM output à la fréquence donnée + * @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) + * @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é + * @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) + * @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); @@ -90,46 +90,46 @@ 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 + * @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 + * @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 + * @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 + * ENCODER ***************************************************************************/ /** * @brief Configure le timer en mode encoder * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @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 + * @brief R�cup�re l'angle, en degr�s * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @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 + * @brief R�cup�re la direction * @note - * @param TIM_TypeDef Timer : indique le timer à utiliser : TIM1, TIM2, TIM3 ou TIM4 + * @param TIM_TypeDef Timer : indique le timer � utiliser : TIM1, TIM2, TIM3 ou TIM4 * @retval None */ enum CounterDirection Timer_encoder_getDirection(TIM_TypeDef * timer); diff --git a/Services/Chrono.c b/Services/Chrono.c index ff2aa38..8cd438f 100644 --- a/Services/Chrono.c +++ b/Services/Chrono.c @@ -21,110 +21,109 @@ static TIM_TypeDef * Chrono_Timer=TIM1; // init par d void Chrono_Task_10ms(void); /** - * @brief Configure le chronomètre. - * @note A lancer avant toute autre fonction. - * @param Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 - * @retval None - */ +* @brief Configure le chronomètre. +* @note A lancer avant toute autre fonction. +* @param Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 +* @retval None +*/ void Chrono_Conf(TIM_TypeDef * Timer) { - // Reset Time - Chrono_Time.Hund = 0; - Chrono_Time.Sec = 0; - Chrono_Time.Min = 0; - - // Fixation du Timer - Chrono_Timer = Timer; +// Reset Time +Chrono_Time.Hund = 0; +Chrono_Time.Sec = 0; +Chrono_Time.Min = 0; - // Réglage Timer pour un débordement à 10ms - Timer_conf(Chrono_Timer, 999, 719); - - // Réglage des interruptions - Timer_IT_conf(Chrono_Timer, Chrono_Task_10ms, 3); - Timer_IT_enable(Chrono_Timer); +// Fixation du Timer +Chrono_Timer = Timer; + +// Réglage Timer pour un débordement à 10ms +Timer_conf(Chrono_Timer, 999, 719); + +// Réglage des interruptions +Timer_IT_conf(Chrono_Timer, Chrono_Task_10ms, 3); +Timer_IT_enable(Chrono_Timer); } /** - * @brief Démarre le chronomètre. - * @note si la durée dépasse 59mn 59sec 99 Hund, elle est remise à zéro et repart - * @param Aucun - * @retval Aucun - */ +* @brief Démarre le chronomètre. +* @note si la durée dépasse 59mn 59sec 99 Hund, elle est remise à zéro et repart +* @param Aucun +* @retval Aucun +*/ void Chrono_Start(void) { - Timer_start(Chrono_Timer); +Timer_start(Chrono_Timer); } /** - * @brief Arrête le chronomètre. - * @note - * @param Aucun - * @retval Aucun - */ +* @brief Arrête le chronomètre. +* @note +* @param Aucun +* @retval Aucun +*/ void Chrono_Stop(void) { - Timer_stop(Chrono_Timer); +Timer_stop(Chrono_Timer); } /** - * @brief Remet le chronomètre à 0 - * @note - * @param Aucun - * @retval Aucun - */ +* @brief Remet le chronomètre à 0 +* @note +* @param Aucun +* @retval Aucun +*/ void Chrono_Reset(void) { - // Arrêt Chrono - Timer_stop(Chrono_Timer); +// Arrêt Chrono +Timer_stop(Chrono_Timer); - // Reset Time - Chrono_Time.Hund=0; - Chrono_Time.Sec=0; - Chrono_Time.Min=0; +// Reset Time +Chrono_Time.Hund=0; +Chrono_Time.Sec=0; +Chrono_Time.Min=0; } /** - * @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c - * @note - * @param Aucun - * @retval adresse de la variable Time - */ +* @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c +* @note +* @param Aucun +* @retval adresse de la variable Time +*/ Time * Chrono_Read(void) { - return &Chrono_Time; +return &Chrono_Time; } /** - * @brief incrémente la variable privée Chron_Time modulo 60mn - * @note - * @param Aucun - * @retval Aucun - */ +* @brief incrémente la variable privée Chron_Time modulo 60mn +* @note +* @param Aucun +* @retval Aucun +*/ void Chrono_Task_10ms(void) { - Chrono_Time.Hund++; - if (Chrono_Time.Hund==100) - { - Chrono_Time.Sec++; - Chrono_Time.Hund=0; - } - if (Chrono_Time.Sec==60) - { - Chrono_Time.Min++; - Chrono_Time.Sec=0; - } - if (Chrono_Time.Min==60) - { - Chrono_Time.Hund=0; - } - +Chrono_Time.Hund++; +if (Chrono_Time.Hund==100) +{ +Chrono_Time.Sec++; +Chrono_Time.Hund=0; +} +if (Chrono_Time.Sec==60) +{ +Chrono_Time.Min++; +Chrono_Time.Sec=0; +} +if (Chrono_Time.Min==60) +{ +Chrono_Time.Hund=0; } +} diff --git a/Services/Chrono.h b/Services/Chrono.h index 4b03760..558b46e 100644 --- a/Services/Chrono.h +++ b/Services/Chrono.h @@ -30,10 +30,10 @@ Les fonctions qui g /** * @brief polle les 3 entrées et gènère les actions à faire - * @note Fct à lancer en tâche de fond (non bloquante) + * @note Fct à lancer en tâche de fond (non bloquante) * @param None - * @retval None - */ + * @retval None + */ void Chrono_Background(void); @@ -55,10 +55,10 @@ typedef struct { /** * @brief Configure le chronomètre. - * @note A lancer avant toute autre fonction. + * @note A lancer avant toute autre fonction. * @param TIM_TypeDef Timer : indique le timer à utiliser par le chronomètre, TIM1, TIM2, TIM3 ou TIM4 - * @retval None - */ + * @retval None + */ void Chrono_Conf(TIM_TypeDef * Timer); @@ -68,37 +68,37 @@ void Chrono_Conf(TIM_TypeDef * Timer); /** * @brief Démarre le chronomètre. - * @note si la durée dépasse 59mn 59sec 99 cent, elle est remise à zéro et repart + * @note si la durée dépasse 59mn 59sec 99 cent, elle est remise à zéro et repart * @param Aucun - * @retval Aucun - */ + * @retval Aucun + */ void Chrono_Start(void); /** * @brief Arrête le chronomètre. - * @note + * @note * @param Aucun - * @retval Aucun - */ + * @retval Aucun + */ void Chrono_Stop(void); /** * @brief Remet le chronomètre à 0 - * @note + * @note * @param Aucun - * @retval Aucun - */ + * @retval Aucun + */ void Chrono_Reset(void); /** * @brief Renvoie l'adresse de la variable Time privée gérée dans le module Chrono.c - * @note + * @note * @param Aucun - * @retval adresse de la variable Time - */ + * @retval adresse de la variable Time + */ Time * Chrono_Read(void);