1、首先先看时序图(不做详解)
2、原理图
3、程序
void HC165_init(void)
{
HAL_GPIO_WritePin(HC165_CE_GPIO_Port,HC165_CE_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(HC165_PL_GPIO_Port,HC165_PL_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(HC165_CP_GPIO_Port,HC165_CP_Pin,GPIO_PIN_SET);
}
uint32_t HC165_READ(void)
{
uint32_t temp_165 = 0;
uint8_t read = 0;
HAL_GPIO_WritePin(HC165_PL_GPIO_Port,HC165_PL_Pin,GPIO_PIN_RESET);
//osDelay(10);
HAL_GPIO_WritePin(HC165_PL_GPIO_Port,HC165_PL_Pin,GPIO_PIN_SET);
if(HAL_GPIO_ReadPin(HC165_Q7_GPIO_Port,HC165_Q7_Pin))
{
temp_165 |= 0x01;
}
for(uint8_t i = 0; i < 23 ; i++)// 读取(3*8 - 1 ) = 24 次
{
temp_165 = temp_165 << 1;
HAL_GPIO_WritePin(HC165_CP_GPIO_Port,HC165_CP_Pin,GPIO_PIN_RESET);
// osDelay(10);
HAL_GPIO_WritePin(HC165_CP_GPIO_Port,HC165_CP_Pin,GPIO_PIN_SET);
// osDelay(10);
if(HAL_GPIO_ReadPin(HC165_Q7_GPIO_Port,HC165_Q7_Pin))
{
temp_165 |= 0x01;
}
//osDelay(10);
}
return temp_165;
}