This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
请教各位技术大牛:
STM32F103与ADS1258之间仅通过SPI的三根线进行连接。软件程序中STM32F103通过SPI发送ADS1258的配置信息给ADS1258。我是按照手册中提供的配置向导部分给的步骤进行配置的。具体配置如下:
void ADS1258_Init(void)
{
// SendDataToADS1258(0x80);//停止转换
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x80); //停止转换
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xC0); //复位SPI
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//Transmit buffer empty flag
SPI_I2S_SendData(SPI1,0x60); //选择寄存器CONFIG0
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x42); //自动扫描模式,CHOP=0
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x61); //选择寄存器CONFIG1
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x03); //转换延时时间为8us,数据传输速率为:23739 SPS,见数据手册中表5
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x62); //选择寄存器MUXSCH
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00); //禁用差分通道
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x63); //选择寄存器MUXDIF
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00); //未选用差分通道
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x64); //选择寄存器MUXSG0
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xFF);
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x65); //选择寄存器MUXSG1
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xFF);
AD_Delay();
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x66); //选择寄存器SYSRED
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00); //0x3D读取参考基准、增益、温度、电压、偏移
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x67); //GPIO配置寄存器GPIOC
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00); //GPIO引脚作为输出
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x68); //GPIO数据寄存器GPIOD
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x00); //GPIO的数据为逻辑低电平
//----------------------------------------------------------------------
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x69); //设备ID寄存器ID
AD_Delay();
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x8B); //只能读
}
然后我再读寄存器的值时,回读的寄存器数据全为0xff。我想请问一下,上述函数中的设置是否有问题?另外想知道什么原因导致回读的寄存器数据不对?谢谢各位啦!