adis16445获取PortID出错

 我最近使用STM32作为控制器,采集ADIS16445的数据。但是再通过SPI通信读取Port ID这里出现了问题,希望有人能帮忙解决,或给些建议。问题描述如下:

这是我编写的读取Port ID部分的代码:

将0x5600拆分成两个字节发送给ADIS16445,之后再读取两个字节,拼接出接收到的数据。

如此循环下去,STM32通过串口连接电脑,打印获取到的Port ID ,进行显示。

接下来是具体的问题,我在电脑上查看串口助手,并不能收到稳定准确的Port Id(0x403D)。

返回下面的内容:

有时返回的是0X000,有时返回的是0xffff,极少数情况下能够接受到正确的Port ID(0x403D)

接下来我使用示波器开始排除错误:

  • CS引脚:

每次发送两个字节的数据,所以CS有两次低电平时段,没有问题。

 

  • SCLK引脚:

发送一个字节需要8个脉冲,也没问题。

 

  • DIN

DIN引脚循环输出DIN = 0101 0110 0000 0000 = 0x5600没问题

 

  • DOUT:

以上三个引脚的波形都正确,但是DOUT输出的波形确是方波,而不是我们期望的Port ID

DOUT = 0100 0000 0011 1101 = 0x403D = 16,445,但这可以解释为什么我接收到的一段时0xffff,一段是0x0000,如此一直循环。但极少情况下能够接受到0X403D

下面是我采集数据的实物图:

现在的情况是,我通过STM32ADIS16445发送的内容都是正确的,但是ADIS16445的输出却不是期望的。

我觉得不是硬件连接的问题,没有短路或者接错线的情况,SPI通信也没问题,然而我也想不出还有哪里出错了。

真心的希望有人能帮我解决一下这个问题,或者给出一些建议。

再次感谢!

  • 我今天又调试了一天,可以确定的是,我的代码是没问题的,也就是SPI通信这里是正确的,所以问题定位到硬件连接上。

    根据我用示波器观察DOUT输出的波形,发现他发出的信号总是和SCLK的很相似,就好像输出的DOUT信号挂载在SCLK的信号上一样,所以我猜测是不是传送频率过高的原因,影响到了DOUT线的传输?我之前用的是杜邦线连接STM32和转接板,后来我使用质量更好一些的航空线进行连接,果然出现了正确的port id

    但是如图所示接收到的数据虽然也有正确的,但很断断续续,所以想问是不是线的原因影响到了信号的传输,DOUT线上的信号被SCLK线影响到?