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
[STM] TIM7(Timer) 타이머 인터럽트 (0) | 2022.12.23 |
---|---|
[STM32]8bit parallel-in/serial-out shift registers (0) | 2022.12.12 |
[STM32]Uart 통신 (HAL_UART_Receive_IT/HAL_UART_Transmit) & printf (0) | 2022.12.09 |
[STM32]GPIO_Output/GPIO_Input/GPIO_EXTI & Systick (0) | 2022.12.09 |
[STM32]IDE Project 생성하기 (0) | 2022.12.08 |