"но у меня выставлен формат данных 8, и вроде он должен отправлять и принимать по 8 импульсов, но на самом деле как я понял по его работе, он первую половину воспринимает как отправляемое сообщение, а вторую часть как получаемое"
Во-первых, кто он?
Во-вторых, первый байт - адрес в датчике, а второй байт - данные (если запись в датчик) или ответ датчика (если чтение из него).
"SPI2->DR = 0x8F" команда, дающая передачу первого байта;
"SPI2->CR1 &= ~ SPI_CR1_BIDIOE" команда, дающая прием второго байта.
Если бы надо было записать данные в датчик, то использовалась бы вторая команда "SPI2->DR = 0x**".