@Pavel A. "but this won't do a 16-bit read (can you see why?)"return (uint16_t)(READ_REG(SPIx->DR));I meant :return (*((volatile uint16_t *)&SPIx->DR));
I had a similar issue reading the DR register correctly.Here's the settings I had:LL_SPI_InitTypeDef SPI_InitStruct = {0};
SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
SPI_InitStruct.DataWidth = LL_...