型号: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哪个地方操作不当,我一直都觉得操作没毛病。请帮我分析。