这两天想试下用单线SPI来读6500的姿态角的,但是研究了几天都没太大进展,双线情况下的DMA方式已经成功了。
但是单线的情况下,我想读一个寄存器,那么按照双线的方式就是先发送 寄存器地址|0x80,然后发送一个0xff,返回的就是该寄存器的值了。
但是在单线传输下,我是这样想的:
[mw_shl_code=c,true] SpiEnOutput();//设置为输出模式
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
{
retry++;
if(retry>200)return 0;
}
SPI_MPU_CS = 0;
SPI_I2S_SendData(SPI2, Addr|0x80); //发送需要读的寄存器地址
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SpiEnInput();//设置为输入模式
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
RecvDat[0] = SPI_I2S_ReceiveData(SPI2); //
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
RecvDat[1] = SPI_I2S_ReceiveData(SPI2); // [/mw_shl_code]
另外,接线我是将STM32的MOSI同时连接6500的MOSI和MISO引脚。这样接线没有问题吧。
请大家指导一下,待我测试完成我将代码分享出来供以后的人参考。谢谢大家了!
|