В функции SPI_IO нет синхронизации. По хорошему дополнительно надо
проверять и вычитывать данные по RXNE ПЕРЕД передачей. В принципе,
если для работы с SPI используется тоько SPI_IO(), то проблем быть
не должно. А если ты еще отдельно где-то делаешь вывод по
SPI->DR = xxx; то получишь разсинхронизацию.