gvalin

  • 2019-05-15
  • 回复了主题帖: BMI088 spi读取数据一直为0xFFFF

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

  • 回复了主题帖: BMI088 spi读取数据一直为0xFFFF

    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; }

  • 回复了主题帖: BMI088 spi读取数据一直为0xFFFF

    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.另外数据手册中还有这句话,不是很理解是什么意思。

  • 发表了主题帖: 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脚没有电平的变化。新手一个,求助大佬们的解答!!!!!

  • 回复了主题帖: SPI读数异常 求指教

    方便借鉴学习一下你的代码吗?

  • 回复了主题帖: SPI读数异常 求指教

    gzc581 发表于 2019-4-16 15:47 这个问题在datasheet里面写了,是要读两次的,仅针对加速度计。楼主这个片子调通了吗?我这边用的F405RGT6, ...
    你好,你的问题解决了吗?我也遇到这个问题

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯币:22
  • 好友:--
  • 主题:1
  • 回复:5
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言