La inicialización de BMC150 no funciona

0

Estoy intentando leer el registro de ID de BMC150 utilizando SPI. Estoy usando el microcontrolador stm32f103. La línea de reloj serie está bien y los datos se envían correctamente a través del MOSI del microcontrolador. Pero ninguna respuesta es enviada de vuelta a través de MISO. He comprobado las señales utilizando el osciloscopio. Aquí está una parte de mi código C. ¿Cómo puedo resolver este problema? Gracias.

    while(1){
    //Activate Slave
    SPI_GPIO->BRR = SPI_PIN_SS;
    // Go to active power mode
    SPI_I2S_SendData(SPIx, 0x4B01);
    while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
    // delay for applying setting stably
    delay_ms(1);
    // Go to normal mode
    SPI_I2S_SendData(SPIx, 0x4C00);
    while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
    delay_ms(1);
    // read request
    SPI_I2S_SendData(SPIx, 0xC000);
    while (!(SPIx->SR & (SPI_I2S_FLAG_RXNE)));
    while (SPIx->SR & (SPI_I2S_FLAG_BSY));
    }
    
pregunta Mr. Nobody

1 respuesta

1

Resolví el problema activando y desactivando el esclavo (usando el pin de selección de chip o esclavo) antes y después del proceso de escritura de la siguiente manera:

while(1){
//Activate Slave
SPI_GPIO->BRR = SPI_PIN_SS;
// Go to active power mode
SPI_I2S_SendData(SPIx, 0x4B01);
while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
SPI_GPIO->BSRR = SPI_PIN_SS;
// delay for applying setting stably
delay_ms(1);
SPI_GPIO->BRR = SPI_PIN_SS;
// Go to normal mode
SPI_I2S_SendData(SPIx, 0x4C00);
while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
SPI_GPIO->BSRR = SPI_PIN_SS;
delay_ms(1);
    
respondido por el Mr. Nobody

Lea otras preguntas en las etiquetas