This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Please Help me for Encoder interface in stm32

Hello all I just working on project using encoder interface but as much as search for example for encoder interface for stm32 I find less I want a sample that use interrupt and micro encoder capability not software solution that can give me direction count and speed but there nothing use full that I can find in reference manual or timers application note or even micro manual the micro I just using is stm32l152rbt6 I find confining alternate function for encoder interface but there no evidence of interrupt handler for using that
Please help me if you can

Part of code that I just use till now

void MX_GPIO_Init(void)
{ GPIO_InitTypeDef GPIO_InitStruct;

/** Configure pins as * Analog * Input * Output * EVENT_OUT * EXTI PA8 ------> SYS_MCO */

/*Enable or disable the AHB peripheral clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB|RCC_AHBPeriph_GPIOA, ENABLE);

/*Configure GPIO pin : PB */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz; GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);

/** I2C1 GPIO Configuration PB6 ------> I2C1_SCL PB7 ------> I2C1_SDA */

/*Enable or disable the AHB peripheral clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

/*Configure GPIO pin : PB */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_I2C1);

/** TIM2 GPIO Configuration PA0-WKUP1 ------> TIM2_CH1_ETR PA1 ------> TIM2_CH2 */

/*Enable or disable the AHB peripheral clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

/*Configure GPIO pin : PA */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; GPIO_Init(GPIOA, &GPIO_InitStruct);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);

/** USART3 GPIO Configuration PB10 ------> USART3_TX PB11 ------> USART3_RX */

/*Enable or disable the AHB peripheral clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

/*Configure GPIO pin : PB */ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_400KHz; GPIO_Init(GPIOB, &GPIO_InitStruct);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_USART3);

/*Configure GPIO pin alternate function */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_USART3);

}

void RCC_Configuration(void)
{ /* TIM2 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

/* GPIOA clock enable */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
}

void TIM2_Configuration(void)
{ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_Period = 0xFFFFFFFF; // Maximal TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

// TIM_EncoderMode_TI1: Counter counts on TI1FP1 edge depending on TI2FP2 level. TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

TIM_Cmd(TIM2, ENABLE);

}