[SOLVED] What is wrong with my rotary encoder?

Yes

all code

const int pinA = PB12;
const int pinB = PB13;
const long decimalOutA = 0b0001000000000000;
const long decimalOutB = 0b0010000000000000;

volatile long rotaryHalfSteps = 0;
volatile uint8_t int0signal = 0;
volatile uint8_t int1signal = 0;

void int0()
{
  int0signal = GPIOB->regs->IDR & decimalOutA ? 1 : 0;
  if ( int0signal == int1signal )
    rotaryHalfSteps++;
  else
    rotaryHalfSteps--;
}

void int1()
{
  int1signal = GPIOB->regs->IDR & decimalOutB ? 1 : 0;
  if ( int0signal == int1signal )
    rotaryHalfSteps--;
  else
    rotaryHalfSteps++;
}


void setup()
{
  pinMode(pinA, INPUT_PULLUP);
  pinMode(pinB, INPUT_PULLUP);

  attachInterrupt(digitalPinToInterrupt(pinA), int0, CHANGE);
  attachInterrupt(digitalPinToInterrupt(pinB), int1, CHANGE);
  Serial.begin(115200);
}

void loop()
{
  long actualRotaryTicks = (rotaryHalfSteps / 2);
  Serial.println(actualRotaryTicks);
  delay(50);
}