OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3804|回复: 6

MPU9250 SPI通信方法

[复制链接]

9

主题

27

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-8
在线时间
18 小时
发表于 2018-11-18 21:10:24 | 显示全部楼层 |阅读模式
1金钱
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  \r\n",res);
        if(res!=0x71)
        {
               
                return 0; //错误
        }
        return 1; //正常
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

27

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-8
在线时间
18 小时
 楼主| 发表于 2018-11-18 21:11:14 | 显示全部楼层
SPI配置:
static void MX_SPI3_Init(void)
{

  /* SPI3 parameter configuration*/
  hspi3.Instance = SPI3;
  hspi3.Init.Mode = SPI_MODE_MASTER;
  hspi3.Init.Direction = SPI_DIRECTION_2LINES;
  hspi3.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi3.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi3.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi3.Init.NSS = SPI_NSS_SOFT;
  hspi3.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi3.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi3.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi3.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi3.Init.CRCPolynomial = 7;
  hspi3.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi3.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  if (HAL_SPI_Init(&hspi3) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}
回复

使用道具 举报

9

主题

27

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-8
在线时间
18 小时
 楼主| 发表于 2018-11-18 21:12:26 | 显示全部楼层
今天吃红烧鱼 发表于 2018-11-18 21:11
SPI配置:
static void MX_SPI3_Init(void)
{

其中分频系数2~64都试过,只有8,16时才会有数据返回,虽然返回值不是预期的。。
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-11-18 21:30:56 | 显示全部楼层
帮顶!!
回复

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2117
金钱
2117
注册时间
2012-5-8
在线时间
314 小时
发表于 2018-11-24 10:36:43 来自手机 | 显示全部楼层
示波器或者逻辑分析仪,看波形
回复

使用道具 举报

9

主题

27

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2017-3-8
在线时间
18 小时
 楼主| 发表于 2018-12-3 15:54:55 | 显示全部楼层
zuoyi 发表于 2018-11-24 10:36
示波器或者逻辑分析仪,看波形

能通信,我觉得应该不是硬件配置的事
回复

使用道具 举报

2

主题

394

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2117
金钱
2117
注册时间
2012-5-8
在线时间
314 小时
发表于 2018-12-8 08:50:50 | 显示全部楼层
今天吃红烧鱼 发表于 2018-12-3 15:54
能通信,我觉得应该不是硬件配置的事

时钟 数据信号的极性怎么样
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 16:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表