오래되서 기억도 안나네 ㅋㅋ
PB5 - SW (스위치) <- 먼가 오작동. + 쪽 3V3과 연결되지 않고 따로 전원 연결해줘야 하는 듯.
PB4 - CLK (로터리)
PB3 - DT (로터리)

귀찮아서 USB CDC 를 통해서 출력하게 함.
| #define BUF_SIZE 50 uint8_t usb_buf[BUF_SIZE]; uint32_t count = 0; int prev_gpio = 0; void gpio_proc() { int curr_gpio = 0; GPIO_PinState gpios[3]; curr_gpio |= (gpios[0] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)); curr_gpio |= (gpios[1] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)) << 1; curr_gpio |= (gpios[2] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5)) << 2; if(prev_gpio != curr_gpio) { sprintf((char*)usb_buf, "%ld %d %d %d\r\n", count, gpios[2], gpios[1], gpios[0]); CDC_Transmit_FS(usb_buf, BUF_SIZE); memset(usb_buf,0,BUF_SIZE); count++; prev_gpio = curr_gpio; } } |
시계방향 회전. 두 번 딱딱 걸리고 다시 0 0 0 으로 돌아온다.
| [2026-08-28 12:20:17.496] 1897 0 0 0 [2026-08-28 12:20:20.417] 1898 0 0 1 [2026-08-28 12:20:20.469] 1899 0 1 1 [2026-08-28 12:20:20.735] 1900 0 1 0 [2026-08-28 12:20:20.767] 1901 0 0 0 |
반시계방향 회전
| [2026-08-28 12:20:20.767] 1901 0 0 0 [2026-08-28 12:20:21.906] 1902 0 1 0 [2026-08-28 12:20:21.959] 1903 0 1 1 [2026-08-28 12:20:22.202] 1904 0 0 1 [2026-08-28 12:20:22.233] 1905 0 0 0 |
정방향 0 - 1 - 3 - 2 - 0 으로
역방향 0 - 2 - 3 - 1 - 0 으로
표현되긴한데.. gray code 같기도 하고?
[링크 : https://woodforest.tistory.com/147]
그래서 저 값을 가지고 판단을 하면 이제 CW 방향인지 CCW 방향인지 판단이 가능해진다.
| char prev_gpio = 0; void gpio_proc() { char curr_gpio = 0; GPIO_PinState gpios[3]; curr_gpio |= (gpios[0] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_3)); curr_gpio |= (gpios[1] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)) << 1; // curr_gpio |= (gpios[2] = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5)) << 2; char lut[4] = {0, 1, 3, 2}; if(prev_gpio != curr_gpio) { char isCW = 0; char prev = lut[prev_gpio]; char curr = lut[curr_gpio]; if((prev + 1) % 4 == curr) { isCW = 1; } sprintf((char*)usb_buf, "%ld %d %d %s\r\n", count, gpios[1], gpios[0], isCW?"CW":"CCW"); CDC_Transmit_FS(usb_buf, BUF_SIZE); memset(usb_buf,0,BUF_SIZE); count++; prev_gpio = curr_gpio; } } |
테스트 끝!
| [2026-08-28 12:33:57.522] 0 0 1 CW [2026-08-28 12:33:57.555] 1 1 1 CW [2026-08-28 12:33:58.521] 2 1 0 CW [2026-08-28 12:33:58.553] 3 0 0 CW [2026-08-28 12:33:59.452] 4 1 0 CCW [2026-08-28 12:33:59.496] 5 1 1 CCW [2026-08-28 12:34:00.156] 6 1 0 CW [2026-08-28 12:34:00.178] 7 0 0 CW [2026-08-28 12:34:00.729] 8 1 0 CCW // 반시계 방향 한번 돌리기 [2026-08-28 12:34:00.779] 9 1 1 CCW [2026-08-28 12:34:04.895] 10 0 1 CCW // 드륵 느낌이 안나게 반시계 방향으로 천천히 돌림 [2026-08-28 12:34:06.098] 11 1 1 CW // 드륵 느낌이 날때까지 시계 방향으로 돌림 [2026-08-28 12:34:07.518] 12 0 1 CCW // 드륵 느낌이 안나게 반시계 방향으로 천천히 돌림 [2026-08-28 12:34:08.590] 13 1 1 CW // 드륵 느낌이 날때까지 시계 방향으로 돌림 [2026-08-28 12:34:09.858] 14 0 1 CCW [2026-08-28 12:34:09.916] 15 0 0 CCW [2026-08-28 12:34:11.124] 16 1 0 CCW [2026-08-28 12:34:11.154] 17 1 1 CCW [2026-08-28 12:34:12.087] 18 1 0 CW [2026-08-28 12:34:12.127] 19 0 0 CW [2026-08-28 12:34:12.444] 20 0 1 CW [2026-08-28 12:34:12.476] 21 1 1 CW [2026-08-28 12:34:12.673] 22 1 0 CW [2026-08-28 12:34:12.693] 23 0 0 CW [2026-08-28 12:34:12.746] 24 0 1 CW [2026-08-28 12:34:12.778] 25 1 1 CW [2026-08-28 12:34:12.913] 26 1 0 CW |
역시 딴짓은 시원한 에어컨과
회사 전기와, 월급을 받으면서 딴짓을 해야 잘됨 ㅋㅋㅋ
'embeded > Cortex-M3 STM' 카테고리의 다른 글
| stm32 port 전체 한번에 출력 변경하기 (0) | 2026.06.22 |
|---|---|
| stm32 uart data bit (0) | 2026.03.17 |
| stm32 다른 영역으로 점프(부트로더) (0) | 2026.03.06 |
| stm32cubeide cpp 변환이후 generate code (0) | 2026.02.25 |
| mbed + stm32cube hal...? (0) | 2026.02.23 |
