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.

困扰我很久的ADC124S051的4个通道数据错位的问题

Other Parts Discussed in Thread: ADC124S051

型号:ADC124S051;

STM32F103RCT6,HAL库编写。SPI时钟频率是4.5Mbps。

应用方式:当ADC的CS拉低时,连续读取4个通道数据,读完后CS拉高。

问题描述:当依此读取4个通道时,数据不能跟通道一一对应。具体表现是:IN1的数据对应的是IN4,IN4的数据是IN3的,IN3的数据是IN2的,IN2的数据是IN1的。读的是相邻的那个通道的数据。如下图箭头指示的那样。

如果是连续读3个通道的话,就是IN1—>IN4—>IN3—>IN1,就是这样读他相邻的通道。

下面是我代码:

         //-------------------------------------------------

uint16_t channel1[1] = {0x0000 };  //这是通道的寄存器值
uint16_t channel2[1] = {0x0800 };
uint16_t channel3[1] = {0x1000};
uint16_t channel4[1] = {0x1800};

//-------------------------------------------------

reg_CS1 = 0;
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel3, (uint8_t*)x_index, 1, 0xff);     //index,这个adc在连续读多通道时会出现通道错位现象,诡异。
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel4, (uint8_t*)x_cos, 1   , 0xff);     //cos
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel1, (uint8_t*)x_sin, 1    , 0xff);     //sin
reg_CS1 = 1;

//-------------------------------------------------

我想要的帮助是:

1、写入通道寄存器的值是不是有错误;

2、通道数据错开的情况怎么解决,我实在想不通对这款ADC哪个地方操作不当,我一直都觉得操作没毛病。请帮我分析。