代码:ADC转换数据读取函数
void Read_ADC_Data(uint8_t *pBuffer, uint8_t Num_Byte)
{
uint8_t channel_1,channel_2;
uint32_t receive_status;
ADS_DRDY_LOW();
SPI2_CS_LOW();
receive_status = (uint32_t) ADS131A02_Write_CMD(ADS_CMD_NULL);
pBuffer[0] = (uint8_t ) (receive_status>>24);// 4字节状态响应
pBuffer[1] = (uint8_t ) (receive_status>>16);
pBuffer[2] = (uint8_t ) (receive_status>>8);
pBuffer[3] = (uint8_t ) (receive_status&0X0000FFFF);
for(channel_1=4; channel_1<(Num_Byte-4); channel_1++) pBuffer[channel_1] = SPI2_Write_Read(0X00);
for(channel_2=8; channel_2<Num_Byte; channel_2++) pBuffer[channel_2] = SPI2_Write_Read(0X00);
delay_ms(1);
SPI2_CS_HIGH();
ADS_DRDY_HIGH();
}
问题:我采用32位数据格式,禁用CRC和Hamming。初始化完成后,读取通道转换数据,总共12个字节(4字节状态响应,4字节通道1转换数据,4字节通道2转换数据)。为何读取的4字节状态为0X2274是正常的,而其余8字节通道数据为0呢?
user6058605:
还有,ADS131A02采用外部16.384MHz晶振提供时钟信号,fdata经分频后为1KHz,M0悬空。STM32F030CCT6为主机,SPI的SCLK信号输出频率为187.5KHz。这样做是不是SCLK的时钟信号频率不匹配啊?
user151383853:
通道数据为0 , 还没有进行 AD 转换吧
Annie Liu:
我需要更多信息来帮助调试这个。请您列出用于初始化芯片的命令。最重要的是,您可能希望使用逻辑分析器来查看最终的通信。这包括SCLK,DIN和DOUT。 每个响应都有助于显示芯片响应的内容。
该芯片使用起来有点复杂,通信必须精确。需要注意的是,要操作ADS131A04,它需要一些初始化才能启动转换。如果您查看ADS131A04EVM(ADS131A02没有特定的EVM),则有一个基本的启动脚本。 它从以下命令开始:
UNLOCK
WAKEUP
WREG 0F0F (这是为了启用器件中的所有ADC).ADS131A02将具有类似的启动过程。