From b5d8a74b410006f33d88b8f159494fbac9d4bc0b Mon Sep 17 00:00:00 2001 From: Cavailles Kevin Date: Mon, 2 Nov 2020 17:07:21 +0100 Subject: [PATCH] girouette finished. To merge with encoder. --- keil_project/Services/IncrEncoder.c | 51 +++++++++++++++++++++++++---- keil_project/Services/IncrEncoder.h | 6 ++-- keil_project/Src/main.c | 13 ++++---- 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/keil_project/Services/IncrEncoder.c b/keil_project/Services/IncrEncoder.c index 578d41d..1a72e29 100644 --- a/keil_project/Services/IncrEncoder.c +++ b/keil_project/Services/IncrEncoder.c @@ -5,29 +5,66 @@ int index_passed = 0; -void init(void){ +void INCR_ENCODER_Init(void){ // use timer in encoder mode (14.3.16) // attach interrupt to pa5 for i // enable gpio clock // configure pin // attach interrupt? LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_AFIO); + + + LL_GPIO_InitTypeDef index_pin_conf, a_pin_conf, b_pin_conf; - LL_GPIO_InitTypeDef index_pin_conf; - index_pin_conf.Mode = LL_GPIO_MODE_FLOATING; index_pin_conf.Pin = LL_GPIO_PIN_5; - LL_GPIO_Init(GPIOC, &index_pin_conf); + index_pin_conf.Mode = LL_GPIO_MODE_FLOATING; + a_pin_conf.Pin = LL_GPIO_PIN_6; + a_pin_conf.Mode = LL_GPIO_MODE_FLOATING; + + + b_pin_conf.Pin = LL_GPIO_PIN_7; + b_pin_conf.Mode = LL_GPIO_MODE_FLOATING; + + + LL_GPIO_Init(GPIOC, &index_pin_conf); + LL_GPIO_Init(GPIOC, &a_pin_conf); + LL_GPIO_Init(GPIOC, &b_pin_conf); + + + LL_EXTI_InitTypeDef exti; + + exti.Line_0_31 = LL_EXTI_LINE_5; + exti.LineCommand = ENABLE; + exti.Mode = LL_EXTI_MODE_IT; + exti.Trigger = LL_EXTI_TRIGGER_RISING; + + LL_EXTI_Init(&exti); + + LL_GPIO_AF_SetEXTISource(LL_GPIO_AF_EXTI_PORTA, LL_GPIO_AF_EXTI_LINE5); + NVIC_SetPriority(EXTI9_5_IRQn, 12); // prio?? NVIC_EnableIRQ(EXTI9_5_IRQn); + //TIMER HERE } void EXTI9_5_IRQHandler(void){ index_passed = 1; - // TODO clear pending + //Set cnt to 0 + + // clear pending (EXTI necessary ?) + LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_5); + NVIC_ClearPendingIRQ(EXTI9_5_IRQn); } -int isAbsolute(void); +int INCR_ENCODER_IsAbsolute(void) +{ + return index_passed; +}; -int getAngle(void); +int INCR_ENCODER_GetAngle(void) +{ + //TODO return cnt or fct(cnt) +}; diff --git a/keil_project/Services/IncrEncoder.h b/keil_project/Services/IncrEncoder.h index bf65dc6..7767b5e 100644 --- a/keil_project/Services/IncrEncoder.h +++ b/keil_project/Services/IncrEncoder.h @@ -2,10 +2,10 @@ /** */ -void init(void); +void INCR_ENCODER_Init(void); -int isAbsolute(void); +int INCR_ENCODER_IsAbsolute(void); -int getAngle(void); +int INCR_ENCODER_GetAngle(void); #endif diff --git a/keil_project/Src/main.c b/keil_project/Src/main.c index b40403b..a5247a4 100644 --- a/keil_project/Src/main.c +++ b/keil_project/Src/main.c @@ -21,6 +21,7 @@ #include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config #include "Chrono.h" +#include "IncrEncoder.h" void SystemClock_Config(void); @@ -50,17 +51,17 @@ int main(void) /* Add your application code here */ // Configuration chronomètre - Chrono_Conf(TIM3); +// Chrono_Conf(TIM3); +// +// // Lancement chronomètre +// Chrono_Start(); - // Lancement chronomètre - Chrono_Start(); - - + INCR_ENCODER_Init(); /* Infinite loop */ while (1) { - Chrono_Background(); + //Chrono_Background(); } }