- MCU型号:stm32f103c8t6;
- ADC信号:ADC124S051,12bit;
- 提供的示例代码是读取3个通道的数据;
- 我使用这颗芯片时遇到的问题:只读取一个通道没问题。如果连续读取>=2个通道的话,通道数据会错开。比如代码里写的是读取A通道,但实际上是B通道数据。如果是4通道连续读取的话,好像是A读的是B,B读的C,C读的D,D读的是A,就类似这样错开。
- 代码写完后我会实际读取数据调试一下,把错位的数据纠正过来。
- 以下是源码:
- HAL库方式,SPI的“DATASIZE”配置成16bit,这就有一个问题,HAL库里的SPI操作函数HAL_SPI_TransmitReceive()的形参类型都是“uint8_t”,但是SPI配置的字节长度是16bit,这怎么办?
- 两种方法,一是直接修改HAL库封装函数,把形参类型改成uint16_t,改来改去自己都糊涂了,尽量不要动封装源码,此法不建议;
二是强制转换类型,虽然形参传递是按照uint8_t来传,但是SPI函数最终给到你的还是完整的uint16_t类型的数据 - 变量要定义成数组形式
uint16_t channel1[1] = {0x0000 };
uint16_t channel2[1] = {0x0800 };
uint16_t channel3[1] = {0x1000};
uint16_t channel4[1] = {0x1800};
uint16_t x_index[1] = { 0 };
uint16_t x_cos[1] = { 0 };
uint16_t x_sin[1] = { 0 };
void Data_collection()
{
......
reg_CS1 = 0;
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel3, (uint8_t*)x_index, 1, 0xff);
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel4, (uint8_t*)x_cos, 1, 0xff);
HAL_SPI_TransmitReceive(&hspi2, (uint8_t*)&channel1, (uint8_t*)x_sin, 1, 0xff);
reg_CS1 = 1;
......
}