SPI搞了一周了,一直没调通。我是直接操作寄存器来控制的,WHO_AM_I 调试时,先片选,然后往SPI中写入WHOAMI|0x80,然后再次发送0xff,然后读取返回值,但总是返回0x3f,0xff,0x0,等数据,就是不出现0x71,WHOANI地址也没错,SPI配置也是在这个论坛上找的例程
要崩溃了,用的是阿波罗F7的SPI3,贴上相关代码:
u8 SPI3_ReadWriteByte(u8 TxData)
{
u8 res = 0;
u8 retry=0;
SPI3->SR|=1<<0; //清空接受位置
MPU_9250_ENABLE ;
for(u8 i=0;i<200;i++) {};
while ((SPI3->SR&1<<1)==0) //等待发送空
{
retry++;
if(retry>200)printf("spisend-err");return 0;
}
SPI3->DR =TxData; //发送
retry=0;
// HAL_Delay(5);
while ((SPI3->SR&1<<0)==0) //等待接收
{
retry++;
if(retry>200)printf("spirec-err");return 0;
}
res = SPI3->DR;
HAL_Delay(1);
MPU_9250_DISENABLE;
return res; //返回接收值
}
u8 check()
{
u8 res= 0 ;
SPI3_ReadWriteByte(WHO_AM_I|0x80); //发送地址
res = SPI3_ReadWriteByte(0xff); //读取值
printf("who-am-i:0x%x
",res);
if(res!=0x71)
{
return 0; //错误
}
return 1; //正常
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
其中分频系数2~64都试过,只有8,16时才会有数据返回,虽然返回值不是预期的。。
一周热门 更多>