您好,
我正在尝试使用STM32F437处理器从ADS1263 SPI中写入和读取,但我在DOUT/DRDY上获得的数据始终为0。
我使用的SPI设置是:
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SCLK频率为6 MHz (48 M / 8)。
要读取寄存器,请使用以下代码:
ADC_IN[0]= ADS1263_REG_CMD + REGX // REGX = 0 .. 26.
ADC_IN[1]= 0;
SPI_ADC_ReadReg (ADC_In,ADC_OUT);
函数 SPI_ADC_ReadReg如下所示:
void SPI_ADC_ReadReg (u8 u8 * ADC_In,u8 *ADC_OUT)
{
/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)== set);
/*选择ADC:芯片选择低*/
SPI_ADC_CS1_LOW;
用于(int i=0;i<3+ADC_IN[1];i++)
{
/*通过SPI2外设发送半个字*/
SPI_I2S_SendData (SPI1, ADC_IN[I]);
/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== RESET;
}
/*等待接收字节*/
While (SPI_I2S_GetFlagStatus (SPI1,SPI_I2S_FLAG_RXNE)== RESET);
/*当DR在NOT emplty */中注册时循环
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)== set);
/*返回从SPI总线读取的半个字*/
ADC_OUT [0]= SPI_I2S_ReceiveData (SPI1);
/*取消选择ADC:芯片选择低*/
SPI_ADC_CS1_HIGH;
}
在逻辑示波器上,所有信号- CS,SCLK和MOSI均正常。 只有DOUT/DRDY卡在0。
你能告诉我我错过了什么吗?
谢谢