Estoy trabajando en una pieza de software para un dispositivo STM32F4xx que comenzó a partir de un proyecto generado por STM32CubeMX.
Estoy usando el periférico SPI que se ha inicializado con la biblioteca HAL. Este es un ejemplo de una función de escritura SPI que funciona:
void spi_write(uint8_t data) {
HAL_SPI_Transmit(&hspi2,&data,1,HAL_MAX_DELAY);
}
Si quiero enviar datos usando el SPI sin usar la biblioteca HAL, pero hacerlo de forma autónoma en los registros (porque es más rápido) no funciona. Esta es mi implementación:
void spi_write(uint8_t data) {
(&hspi2)->Instance->DR = data;
while (!((&hspi2)->Instance->SR & ((uint16_t)0x0002))); //Check TXE flag (SPI_I2S_FLAG_TXE)
while ((&hspi2)->Instance->SR & ((uint16_t)0x0080)); // Check busy flag (SPI_I2S_FLAG_BSY)
}
¿Alguna idea de por qué la segunda implementación no funciona? ¡Gracias!