[STM32]8bit Serial-in/Parallel-out Shift register Control
1. PC8/PC6/PC7 Pin을 GPIO_Output Pin으로 설정합니다.
2. SDI에 8개의 Data를 Write합니다.
3. SDI에서 1개의 Data를 Wirte할 때마다 Clock를 발생합니다.
4. 8개의 Data를 모두 Wirte후에는 Latch를 발생합니다.
예를 들어
OUT1 > LOW
OUT2 > HIGH
OUT3 > LOW
OUT4 > HIGH
OUT5 > LOW
OUT6 > HIGH
OUT7 > LOW
OUT8 >HIGH
를 출력하고 싶다면
uint8_t sdi_data = 0xAA; // 0b10101010
for(uint8_t i=0; i<8; i++)
{
if( (sdi_data << i) & 0x80 ) // sdi pin high 또는 low
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
}
else
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8,, GPIO_PIN_RESET);
}
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET); // clk pin high
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET); // clk pin low
}
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET); // latch pin high
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET); // latch pin low