7333|6

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

BMI088 spi读取数据一直为0xFFFF [复制链接]

我用的是STM32F407VE板子。SPI初始化代码如下:
void vSPIInit(  void  )
{

    GPIO_InitTypeDef  GPIO_InitStructure;
    SPI_InitTypeDef   SPI_InitStructure;
    DMA_InitTypeDef   DMA_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;
       
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOB,  ENABLE );
                RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOE,  ENABLE );
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_SPI1,  ENABLE );


       
               
        //片选
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_Init( GPIOE,  &GPIO_InitStructure );
               
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_Init( GPIOB,  &GPIO_InitStructure );
               
                //                /* disable the chip select */
                ACC_DIS_CS();
                GYR_DIS_CS();
               
               
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init( GPIOB,  &GPIO_InitStructure );
               
                //MOSI MISO
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;       
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_Init( GPIOB,  &GPIO_InitStructure );
               
                GPIO_PinAFConfig( GPIOB, GPIO_PinSource3, GPIO_AF_SPI1 );
    GPIO_PinAFConfig( GPIOB, GPIO_PinSource4, GPIO_AF_SPI1 );
    GPIO_PinAFConfig( GPIOB, GPIO_PinSource5, GPIO_AF_SPI1 );
//    SPI_Cmd(BMI088_SPI, DISABLE);
//                SPI_I2S_DeInit(BMI088_SPI);
                //这里只针对SPI口初始化
                RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//复位SPI1
                RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止复位SPI1
               
    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                //设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                            //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                    //串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                            //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                    //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;                                //CRC值计算的多项式
    SPI_Init( SPI1,  &SPI_InitStructure );                              //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
    SPI_Cmd( SPI1,  ENABLE );   
}



MOSI和SCK波形正常,但是MISO脚没有电平的变化。新手一个,求助大佬们的解答!!!!!

1557887830(1).png (34.27 KB, 下载次数: 0)

1557887830(1).png

1557887913(1).png (163.55 KB, 下载次数: 0)

1557887913(1).png
此帖出自stm32/stm8论坛

最新回复

楼主,问题有解决嘛,我碰到同样的问题   详情 回复 发表于 2022-10-8 16:06
点赞 关注(1)
 

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
in order to allow for the correct internal synchronisation of data writen to the bmi088,a wait time of at least 2us must be followed.另外数据手册中还有这句话,不是很理解是什么意思。
此帖出自stm32/stm8论坛
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
spi读取的代码如下:
uint8_t spiSendByte(uint8_t byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

  /* Send byte through the SPI peripheral */
  SPI_I2S_SendData(BMI088_SPI, byte);

  /* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

  /* Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(BMI088_SPI);
}

static char spiReceiveByte()
{
  return spiSendByte(0xff);
}
int spi_burst_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
        int i;
        reg_addr = (reg_addr | 0x80);
  /**< Burst read code comes here */
  if (dev_id == BMI088_ACCEL_I2C_ADDR_PRIMARY)
  {
    ACC_EN_CS();
  }
  else
  {
                GYR_DIS_CS();
    GYR_EN_CS();
  }

  if (len <= 1 || len > SPI1_RECEIVE_BUFFER_SIZE)
  {
    spiSendByte(reg_addr);
    for (i = 0; i < len; i++)
    {
      reg_data[i] = spiReceiveByte();

    }
  }
  else
  {
    spiDMATransaction(reg_addr, reg_data, len);
  }

  if (dev_id == BMI088_ACCEL_I2C_ADDR_PRIMARY)
  {
    ACC_DIS_CS();
  }
  else
  {
    GYR_DIS_CS();
  }

  return 0;
}
此帖出自stm32/stm8论坛
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

4
 
现在是先要读取陀螺仪的chipid,正确返回的值是0x0F,但是一直读到的是0xffff。查看波形后,mosi和sck的波形是正确的,但发现miso脚没有波形的原因? 这样的情况是不是可以确定为,硬件可能有问题?
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
请问楼主,您的问题解决了嘛,我这两天也遇到了一样的问题嘞,您qq多少我们交流一下呗
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
我啊偶 发表于 2019-10-24 08:07
请问楼主,您的问题解决了嘛,我这两天也遇到了一样的问题嘞,您qq多少我们交流一下呗

我qq 859298198
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
我啊偶 发表于 2019-10-24 08:07 请问楼主,您的问题解决了嘛,我这两天也遇到了一样的问题嘞,您qq多少我们交流一下呗

楼主,问题有解决嘛,我碰到同样的问题

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表