#74HC165A STM32代码
注意第一个数据应在CLK还没产生上升沿时读取。
#define DATA_SIZE (8)
#define PL_Pin(a) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, (GPIO_PinState)a)
#define CLK_Pin(a) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, (GPIO_PinState)a)
#define DO_Pin() HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)
uint32_t read_74hc165a_data(void)
{
uint32_t data=0;
uint8_t pin_res = 0;
CLK_Pin(0);
PL_Pin(1);
delay_ms(1);
uint8_t pin_sta[DATA_SIZE]={0};
pin_res = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)&0x01;
data=data|pin_res;
pin_sta[0] = pin_res;
for(uint8_t i=1;i<DATA_SIZE;i++)
{
delay_ms(1);
CLK_Pin(1);
delay_ms(1);
pin_res = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)&0x01;
data=(data<<1)|pin_res;
pin_sta[i] = pin_res;
CLK_Pin(0);
}
delay_ms(1);
PL_Pin(0);
printf("%d %d %d %d %d %d %d %d\r\n",pin_sta[0],pin_sta[1],pin_sta[2],pin_sta[3],pin_sta[4],pin_sta[5],pin_sta[6],pin_sta[7]);
return data;
}