原子哥,你好!在调试用stm32控制ad7656进行采样时,遇到了麻烦。我是用直流电压进行测试,ad7656输出的采样结果大部分正确,但是有时候完全不符合实际值(采样1000个,大约有10个出错),恳请原子哥解惑!多谢啦!
附上程序:
1、ad7656初始化程序
void AD_init(void)
{
CONVST_High; //ad7656初始化
Reset_High;
delay_us(1);
Reset_Low;
delay_us(1);
CS_High;
SCK_Low;
CONVST_Low;
}
2、ad7656采样程序
void read_ad7656(void)
{
unsigned char i;
CONVST_High; //需要60ns的延时
for(i=0;i<20;i++);
while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2)==1); //检测busy管脚的电平
for (AD_count=0;AD_count<6;AD_count++)
{
SPI_Cmd(SPI2, ENABLE);
for(i=0;i<10;i++);
CS_Low;
SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
AD_SPI_rx_buff[AD_count]=SPI_I2S_ReceiveData(SPI2);
SPI_Cmd(SPI2,DISABLE);
CS_High;
for(i=0;i<40;i++);
}
SCK_Low;
Reset_High; //100ns的复位脉冲
for(i=0;i<20;i++);
Reset_Low;
for(i=0;i<20;i++);
CONVST_Low;
(i=0;i<20;i++);
}
|