STM32F107 y mems LIS3DH problemas de intercambio de datos spi

0

Estoy intentando configurar el chip LIS3DH a través de la interfaz SPI. Aquí está mi código:

void init(void)
{ 
  SPI_InitTypeDef  SPI_InitStructure;

   // SPI configuration 
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI_INT, &SPI_InitStructure);

   // Enable SPI  
  SPI_Cmd(SPI_INT, ENABLE);
}

void set_up(void)
{
  uint16_t buf = 0, msg = 0;

  msg = READ + DEVICE_TYPE_REG;
  //msg = 0x80 + 0x0F;
  LIS3DHTR_CHIP_SELECT();

  while (1) {

    while (SPI_I2S_GetFlagStatus(SPI_INT, SPI_I2S_FLAG_BSY) == SET);
    SPI_I2S_SendData(SPI_INT, msg);
    while (SPI_I2S_GetFlagStatus(SPI_INT, SPI_I2S_FLAG_BSY) == SET);
    if (SPI_I2S_GetFlagStatus(SPI_INT, SPI_I2S_FLAG_RXNE) == SET) {
      buf = SPI_I2S_ReceiveData(SPI_INT);
      if (buf == 51)
        break;
    }
  }

  LIS3DHTR_CHIP_DESELECT();
}

Problema: el registro lis3dh con la dirección 0x0F se mantiene constante 51 (tipo de dispositivo de algo). cuando envío una solicitud para leer este registro (dirección Reg más bit MSB establecido) a través de la interfaz SPI STM32F107 SPI RX Register me da 0xFF al principio. Y solo en la segunda iteración del ciclo ( while(1) ) me sale verdadero 51. Este problema aparece en cada solicitud de mi chip a lis3dh. ¿Es normal o me he perdido algo?

    
pregunta r_spb

0 respuestas

Lea otras preguntas en las etiquetas