Other Parts Discussed in Thread:ADS127L01
使用STM32与ADS127L01进行通信,使用硬件SPI模式,在读取时,ADS127L01总是间歇工作,不工作的时间较长,因为DRDY一直处于高电平。
电路板未使用顺序供电,所以按照手册里,所有上电稳定以后,进行了RESET/PWDN引脚下拉,然后再上拉。但是仍然无法使得芯片正常工作。芯片所有供电都正常,参考电压2.5V。
void ads127_init(void)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12); //RESET 低有效
delay_ms(500);
GPIO_SetBits(GPIOB,GPIO_Pin_12); //RESET 完成
delay_ms(1000);
delay_ms(1000);
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //CS拉低,使能ADS127
delay_ms(10);
SPI1_ReadWriteByte(0x41); //开始进行写寄存器
SPI1_ReadWriteByte(0x01);
SPI1_ReadWriteByte(0x02);
SPI1_ReadWriteByte(0x00);
SPI1_ReadWriteByte(START); //开始进行数据转换
}
int main(void)
{ u32 data=0;
u32 t=0;
delay_init(); //延时函数初始化 Usart1_Init(115200); //串口初始化为115200
IO_Init(); //初始化与IO连接的硬件接口
SPI1_Init(); //初始化SPI
SPI1_SetSpeed(SPI_BaudRatePrescaler_8); //设置为9M时钟,高速模式
ads127_init();
while(1)
{
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0))
{
t++;
if(t>=10000)
{
t=0;
ads127_init();
}
}
SPI1_ReadWriteByte(RDATA);
data = data + SPI1_ReadWriteByte(0x00);
data <<= 8;
data = data + SPI1_ReadWriteByte(0x00);
data <<= 8;
data = data + SPI1_ReadWriteByte(0x00);
UsartPrintf(USART1,"%x\r\n",data);
data=0;
}
}
Amy Luo:
您好,
您可以用示波器抓一下DRDY、START、RESET/PWDN、CLK异常时的波形吗
,
user6603961:
你好,我现在没法抓取波形,我想问一下有没有参考的原理图,芯片手册上写的有些模糊,我是看的另一个人发的贴子的图,现在遇到与他一样的问题,我使用的是2.5V作为参考电压
,
user6603961:
这是我的原理图
,
Amy Luo:
12、13脚FILTER;15、16管脚OSR;以及FSMODE、FORMAT数字输入管脚您为什么都悬空了?这些输入管脚是不可以悬空的
我看到您把START接地上了,那么您需要通过START 、STOP命令来启动和停止转换,停止转换会复位数字滤波器。您只需要发送一次 START 命令, ADC 就可以连续转换。 转换时,您将看到 /DRDY 从高切换至低切换,以指示何时有新数据可用。 在发送 STOP 命令之前,它不会停止。