用STM32F103VC的三个普通IO口控制四片74HC595的SCK,RCK,SI三个输入线进行工作,按照芯片手册,并且用示波器观察三跟线的时序都没错,结果每次输出端QA~QH的数据都是以发送字节的最后一个bit决定,最后一个bit为1,输出端全部拉高;为0,全部拉低。到底问题出在哪里呢? 代码如下:
PE11连RCK,PE12连SCK,PE13连SI
Set_System();
GPIO_Configuration();
USART_Configuration();
KeyGPIO_Init(); //PE11,PE12,PE13全设为推挽式输出
GPIO_ResetBits(GPIOE, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_11);
while(k--)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_11); //拉低RCK
for(j=0;j<4;j++)
{
Data_Byte = SI_Buf4[j];
for(i=0;i<8;i++)
{
GPIO_ResetBits(GPIOE, GPIO_Pin_12); //拉低SCK
if((Data_Byte&0x01)==0x01)
GPIO_SetBits(GPIOE, GPIO_Pin_13);
else
GPIO_ResetBits(GPIOE, GPIO_Pin_13);
Delay(SCK_DELAY);
GPIO_SetBits(GPIOE, GPIO_Pin_12); //拉高SCK
Data_Byte = Data_Byte>>1; //数据右移,低位先输出
Delay(SCK_DELAY);
}
GPIO_ResetBits(GPIOE, GPIO_Pin_12);
}
GPIO_SetBits(GPIOE, GPIO_Pin_11);
} |