Вторая страница этой темы не пережила моих махинаций с базой данных, поэтому восстанавливаю вкратце... Итак, решение проблемы заключалось в том, чтобы передачу данных по SPI осуществить следующим образом:
//------------------------------------------------------------------- void SPI_SendByte(uint8_t data) { while((SPI1->SR & SPI_SR_TXE) == RESET); SPI1->DR = data; } //------------------------------------------------------------------- void SPI_WaitLastData() { while((SPI1->SR & SPI_SR_TXE) == RESET); while((SPI1->SR & SPI_SR_BSY) != RESET); } //------------------------------------------------------------------- void SPI_SendDataMultiple(uint8_t *data, int num) { // Handle CS for (int i = 0; i < num; i++) { SPI_SendByte(*data); data++; } SPI_WaitLastData(); // Handle CS } //-------------------------------------------------------------------
Соответственно, если необходимо передать всего 1 байт суммарно, то после SPI_SendByte() также надо использовать SPI_WaitLastData().
И я добавлю файлик, где перечислены ошибки при работе с SPI. Правда он про TFT дисплеи. Но общая идея очень хорошо расписана.
Кажется, я нашёл ошибку, почему все так странно работало, но пока не получается отправить данные в сеть по udp, поэтому не могу точно говорить, что решение верное