그래서 STM32 프로젝트에서 메뉴를 제어하기 위해 로터리 엔코더를 사용하려고합니다. 두 개의 로터리 엔코더를 사용하여 화면의 각면을 제어합니다 (분할 메뉴).TIMx ARR 값을 선택한 값으로 초기화하도록 설정할 수 있습니까?
엔코더의 펄스를 계산하는 두 타이머의 ARR 레지스터를 초기화 할 때 레지스터를 0으로 초기화하고 카운터를 시계 반대 방향으로 움직이면 레지스터가 오버플로되고 65535의 최대 값으로 이동하여 내 코드가 멈춤을 계산하는 방법.
TIM-> CNT 값을 0에서 65535 사이의 중간에 사용자 정의 값으로 설정하는 방법이 있는지 말해 줄 수 있습니까? 이렇게하면 값 사이의 차이를 쉽게 확인하고 숫자의 점프에 대해 걱정하지 않아도됩니다.
모듈 식 산술 연산이 카운터의 범위와 일치 할 때 차이가 발생합니다.이 경우 16 비트 정수로 뺄셈을 수행합니다. 그 사이의 총 변화가 -32768에서 +32767을 초과하지 않는다고 가정하면'(int16_t) (new_count - old_count)'는 두 샘플 간의 차이를 계산합니다. – doynax
정확히 처음 코드를 작성했을 때 생각했던 것입니다.하지만 0 부근에서 일관성없는 동작을 발견했습니다. 어떤 이유로 든 TIM-> CNT에서 음수 값을 가져올 수 없으므로 가능한 가장 큰 값으로 이동합니다. 변수가 부호있는 정수인지 확인했습니다. –