#include "IncrEncoder.h" #include "stm32f1xx_ll_gpio.h" #include "stm32f1xx_ll_bus.h" #include "stm32f1xx_ll_exti.h" int index_passed = 0; 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; index_pin_conf.Pin = LL_GPIO_PIN_5; 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; //Set cnt to 0 // clear pending (EXTI necessary ?) LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_5); NVIC_ClearPendingIRQ(EXTI9_5_IRQn); } int INCR_ENCODER_IsAbsolute(void) { return index_passed; }; int INCR_ENCODER_GetAngle(void) { //TODO return cnt or fct(cnt) };