Shift Register 를 이용한 Ditigal Pin 확장

2025. 12. 01.
카테고리
게시일
Dec 1, 2025

개요

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

출력 핀의 확장

SN74HC595의 Pinout
SN74HC595의 Pinout
대표적인 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 를 주는 것도 괜찮다.
 

시리얼 입력 시 타이밍 (핀 확장시)

  • 타이밍
      1. 시리얼 입력 중에는 RCLK 를 LOW로 바꾼다. (추천)
      1. 시리얼 입력
        1. SRCLK를 LOW로 둔 상태에서 시작한다.
        2. SER에 첫 번째 비트를 세팅한다.
        3. SRCLK를 HIGH → LOW 로 바꾼다.
        4. 총 8번 시행
      1. 시리얼 입력 완료 후 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); } }
uint8_t 데이터를 시프트 레지스터에 입력하는 예제
// 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 연결
https://electronics.stackexchange.com/questions/676651/shift-register-outputting-data-on-two-pins-although-only-one-bit-is-set
3개의 74HC595를 데이지 체인으로 연결한 예제. 8x3=24개의 출력핀이 활성화된다.
 
한 개 연결할 때 마다 출력 핀이 8개씩 늘어난다. 3개를 Daisy Chain으로 연결하면, 24개의 Digital 출력 핀을 얻을 수 있다.

입력 핀의 확장

입력 핀의 확장 또한
 
 
제목: Shift Register 를 이용한 Ditigal Pin 확장작성일: 2025. 12. 01.