You are on page 1of 1

code in header.

static GPIO_TypeDef* PORT_ENC;


static uint16_t DT_ENC, CLK_ENC;

void Encoder(GPIO_TypeDef* ENC, uint16_t DT, uint16_t CLK)


{
PORT_ENC = ENC;
DT_ENC=DT;
CLK_ENC=CLK;
}

uint8_t checkEncoder(void)
{
static uint8_t CountEncOld=1, CountEncNew=1;
static uint16_t EncS0,EncS1;
uint8_t ret_val=0;

EncS0=(PORT_ENC->IDR & ((1UL<<CLK_ENC)|(1UL<<DT_ENC)));

ret_val=0;
if(EncS1 != EncS0)
{
if(EncS1==3 && EncS0==1)
{
if(++CountEncNew>3)
CountEncNew=3;
}

else if(EncS1==3 && EncS0==2)


{
if(--CountEncNew<1)
CountEncNew=1;
}

EncS1=EncS0;
}

if(CountEncOld!= CountEncNew)
{
CountEncOld= CountEncNew;
ret_val=CountEncNew;
}

return ret_val;
}

code in main.c - to initialize encoder

/* USER CODE BEGIN 0 */


uint16_t DatEnc, DatEncOld;

/* USER CODE BEGIN 2 */


Encoder(GPIOC, ENC_A, ENC_B);
DatEncOld=DatEnc;

And can be used in while such /* USER CODE BEGIN 3 */

MODE=checkEncoder();
if(MODE!=0)
{
if(MODEOld != MODE)
{
MODEOld = MODE;
LCD_setCursor(2,14);
sprintf(msg,"%d",(int)MODE);
LCD_print(msg);
}
}

You might also like