카테고리
게시일
Dec 1, 2025
개요

Shift register는 레지스터 간 Shift 연산을 추가한 레지스터이다. Shift register에는 두 가지가 있고, 하나는 직렬로 들어온 입력을 시프트 해서 저장한 뒤, 병렬로 출력하는 SIPO 방식, 또 다른 하나는 병렬로 들어온 입력을 저장한 뒤, 시프트 하면서 직렬로 출력하는 PISO 방식이다.
출력 핀의 확장

대표적인 SIPO 레지스터인 74HC595를 이용해 출력 핀을 확장하는 것이 가능하다. 출력하는 쪽에서는 3가지 핀을 이용해서, 총 8개의 출력 핀으로 확장할 수 있다.
- SER(DS) : Data Serial
- SRCLK(SH_CP) : Shift Clock
- RCLK(ST_CP) : Storage Clock
이 외에 고려해야 할 부분
- OE 는 Output Enable 로, Active Low이므로 출력이 필요할 때 반드시 Low 를 주어야 한다. 출력이 비활성화 되어 있다면 출력이 3-state 상태(Z) 가 된다. 핀 확장의 경우 항상 LOW를 입력한다.
- SRCLR는 Shift Register Clear로, Active Low이므로 반드시 HIGH 상태를 유지해야 Shift Register가 들어간다. 초기화가 필요하다면, MCU의 셋업 코드에서 한번 LOW 를 주는 것도 괜찮다.
시리얼 입력 시 타이밍 (핀 확장시)
- 타이밍
- 시리얼 입력 중에는 RCLK 를 LOW로 바꾼다. (추천)
- 시리얼 입력
- SRCLK를 LOW로 둔 상태에서 시작한다.
- SER에 첫 번째 비트를 세팅한다.
- SRCLK를 HIGH → LOW 로 바꾼다.
- 총 8번 시행
- 시리얼 입력 완료 후 RCLK를 HIGH로 하면 Rising Edge에서 출력 핀이 선택된다.
Arduino에는
shiftout 함수가 있어 쉽게 이용이 가능하다.예제 코드 (STM32)
8비트 변수 하나로 출력이 가능하다.
void shiftOut(uint8_t data) { for (int i = 7; i >= 0; i--) { // SER에 i번째 비트 출력 HAL_GPIO_WritePin(SER_GPIO_Port, SER_Pin, (data >> i) & 0x01); // SH_CP 상승 펄스 HAL_GPIO_WritePin(SRCLK_GPIO_Port, SRCLK_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SRCLK_GPIO_Port, SRCLK_Pin, GPIO_PIN_RESET); } }
// RCLEAR 펄스 (Active Low) HAL_GPIO_WritePin(SRCLK_GPIO_Port, RCLR_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(SRCLK_GPIO_Port, RCLR_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(SRCLK_GPIO_Port, RCLR_Pin, GPIO_PIN_SET); // 시프트 입력 코드 shiftOut(data); // RCLK 펄스 (병렬 출력 반영) HAL_GPIO_WritePin(RCLK_GPIO_Port, RCLK_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(RCLK_GPIO_Port, RCLK_Pin, GPIO_PIN_RESET);
예제 코드 (Arduino)
digitalWrite(RCLK_Pin, LOW); // 데이터 입력 준비 shiftOut(SER_pin, clockPin, MSBFIRST, data); // 시프트 출력 digitalWrite(RCLK_Pin, HIGH); // RCLK 펄스
Arduino에서는 출력 펄스를 주어 쉽게 이용이 가능하다.
74HC595의 Daisy Chain
두 개 이상의 IC나 모듈 등을 선형으로 이어서 마치 하나의 IC나 모듈을 제어하는 것처럼 사용하는 것을 Daisy Chain 연결이라고 한다. 두 개의 74HC595를 이으려면
- 첫 번째 Shift Register의 QH’ → 두 번째 Shift Register의 SER
- 두 Shift Register 모두 SRCLK, RCLK 연결
한 개 연결할 때 마다 출력 핀이 8개씩 늘어난다. 3개를 Daisy Chain으로 연결하면, 24개의 Digital 출력 핀을 얻을 수 있다.
입력 핀의 확장
입력 핀의 확장 또한
