我用的是STM32加CS5532,但是复位后C5532的输出引脚SDO总是高电平,读数总是ffffffff,求大神指导下面是比分程序:
void CS5532W2Command(unsigned char date)//cs5532写命令
{
unsigned char temp,i;
temp = date;
CS5532_SCLK = 0;
CS5532_CS = 0;
CS5532_DIN = 0;////////////
delay_us(3);
for(i=0; i<8; i++)
{
if((temp<<i)&0x80)
CS5532_DIN = 1; //如果为1写1
else
CS5532_DIN = 0; //如果为0写0
delay_us(3);
CS5532_SCLK = 1;
delay_us(3); //添加5us
CS5532_SCLK = 0;
delay_us(3); //添加5us
}
CS5532_DIN = 0;
// CS5532_CS = 1; //片选拉低
}
void CS5532W2Command1(unsigned char date)//cs5532写命令
{
unsigned char temp,i;
temp = date;
CS5532_SCLK = 0;
CS5532_CS = 0;
CS5532_DIN = 0;///////////
delay_us(1);
for(i=0; i<8; i++)
{
if((temp<<i)&0x80)
CS5532_DIN = 1; //如果为1写1
else
CS5532_DIN = 0; //如果为0写0
delay_us(10);
CS5532_SCLK = 1;
delay_us(190); //添加5us
CS5532_SCLK = 0;
delay_us(190); //添加5us
}
// CS5532_CS = 1; //片选拉低
}
void CS5532SoftwareReset(void)
{
unsigned char i;
CS5532_CS = 1;
delay_us(200);
CS5532_CS = 0;
delay_us(200);
CS5532_DIN = 0;
CS5532_SCLK = 0;
for(i=0;i<31; i++) //
CS5532W2Command1(0xff);
CS5532W2Command(0xfe);
delay_ms(1000);
CS5532W2Command(0x03);
CS5532W2Command(0x22);
CS5532W2Command(0x00);
CS5532W2Command(0x00);
CS5532W2Command(0x00);
delay_ms(1000);
}
//读取CS5532的各大寄存器的值
unsigned long int ReadCS5532RegData(void)
{
unsigned char i;
unsigned long int da;
CS5532_CS = 0; //片选拉低
CS5532_SCLK = 0;
CS5532_DIN = 0;
delay_us(4); //添加5us
for(i=0;i<32; i++) //
{
CS5532_SCLK = 1;
da<<=1; //读入数据,高位在前
da+=CS5532_DOUT;
CS5532_SCLK = 0;
delay_us(12);
}
return da;
// CS5532_CS = 1; //片选释放
}
//读取CS5532的采样数据,为高24位
unsigned long int ReadCS5532SampData(void)
{
unsigned char i;
unsigned int da=0;
CS5532_CS = 0;
CS5532_SCLK = 0;
CS5532_DIN = 0;
da1=0;
delay_us(3);
for(i=0;i<8;i++) // 8 个清串口时钟
{
CS5532_SCLK=1; //时钟高
delay_us(24);
CS5532_SCLK=0; //时钟低
delay_us(24);
}
for(i=0;i<24; i++) //
{
CS5532_SCLK = 1;
da<<=1;//读入数据,高位在前
da+=CS5532_DOUT;
CS5532_SCLK = 0;
delay_us(24); //添加5us
}
for(i=0;i<8; i++) //
{
CS5532_SCLK = 1;
da1<<=1;//读入数据,高位在前
da1+=CS5532_DOUT;
CS5532_SCLK = 0;
delay_us(24); //添加5us
}
return da;
}