Función de lectura SPI de STM8S

1

Estoy convirtiendo la biblioteca arduino-nrf905 para stm8s. Hay una función spi en la biblioteca arduino, es SPI.Transfer (uint8_t reg). Esta función puede escribir y leer spi. Pero, hay dos funciones en la biblioteca peripharel stm8s. Estas funciones son SPI_SendData (uint8_t reg) y SPI_ReceiveData (void).

SPI.transfer código de la biblioteca arduino:

byte SPIClass::transfer(byte _data) {
  SPDR = _data;
  while (!(SPSR & _BV(SPIF)))
    ;
  return SPDR;
}

SPI_SendData de la biblioteca STM8S:

void SPI_SendData(uint8_t Data)
{
  SPI->DR = Data; /* Write in the DR register the data to be sent*/
}

SPI_ReceiveData de stm8s

uint8_t SPI_ReceiveData(void)
{
  return ((uint8_t)SPI->DR); /* Return the data in the DR register*/
}

Quiero convertir este código a stm8s, pero no funciona.

Código Arduino:

((uint8_t*)data)[i] = spi_transfer(NRF905_CMD_NOP);

Código STM8S:

SPI_SendData(NRF905_CMD_NOP);
((uint8_t*)data)[i] = SPI_ReceiveData();

¡Gracias!

    
pregunta kbtr

1 respuesta

1

Hay indicadores en los que debe esperar, indicadores que indicarán cuándo se realiza la transmisión de SPI o cuando se recibe un byte. Prueba esto:

while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET); // wait for any previous data to be sent; checks if the Transmit Register is empty
SPI_SendData(NRF905_CMD_NOP);
while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);  // wait for a byte to come in; checks if the Receive register is not empty
((uint8_t*)data)[i] = SPI_ReceiveData();
    
respondido por el TisteAndii

Lea otras preguntas en las etiquetas