So ist das schon viel besser
Also ich kann in deinem Code keine Pin-Definitionen für die SPI-Pins, und auch für die anderen Peripherie-Pins erkennen (bis auf SS und deine Status-Pins).
Leider fehlen aber wieder ein paar Infos, die Defines, die du verwendest, kennen wir alle nicht...
Auch finde ich den Code im allgemeinen sehr "unschön", hab mich nie mit Cube anfreunden können.
Ich programmiere die STM32 nach wie vor mit der SPL, auch wenns veraltet ist, damit bin ich "groß" geworden.
Auf die schnelle hab ich dir mal was zusammengebastelt, kanns leider nicht testen, sollte aber tun:
Code:
#include "stm32f4xx_conf.h"
#include "arm_math.h"



#define IMU1_SS_LOW         GPIOB->ODR &= ~GPIO_Pin_12
#define IMU1_SS_HIGH        GPIOB->ODR |= GPIO_Pin_12

#define LSM6DS3WRITEREG     0x00
#define LSM6DS3READREG      0x80

#define WHOAMIREG           0x0F
#define WHOAMIVALUE         0x69



int main(void);
void InitSpi2(uint16_t Prescaler);
uint8_t Spi2Transfer(uint8_t Data);
void Delay(uint32_t t);



volatile uint8_t WhoAmI;


int main(void){

    SystemInit();
    
    InitSpi2(2);
    
    while(1)
    {
        Delay(1000); //! just a 'random' Delay
        IMU1_SS_LOW;
        WhoAmI = Spi2Transfer(WHOAMIREG | LSM6DS3READREG); //! read out
        IMU1_SS_HIGH;
        if(WhoAmI==WHOAMIVALUE)
        {
            //! Correct answer
        }else
        {
            //! False or no answer
        }
    }
}



void Delay(uint32_t t){
    for(uint32_t i=0;i<t;i+=1) ;
}




void InitSpi2(uint16_t Prescaler){
    GPIO_InitTypeDef GPIO_InitTypeDefStruct;
    SPI_InitTypeDef SPI_InitTypeDefStruct;


    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
    

    SPI_Cmd(SPI2, DISABLE);
    if(Prescaler==2)
    {
        SPI_InitTypeDefStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    }else if(Prescaler==4)
    {
        SPI_InitTypeDefStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    }
    else if(Prescaler==128)
    {
        SPI_InitTypeDefStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
    }else
    {
        SPI_InitTypeDefStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;
    }
    SPI_InitTypeDefStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    SPI_InitTypeDefStruct.SPI_Mode = SPI_Mode_Master;
    SPI_InitTypeDefStruct.SPI_DataSize = SPI_DataSize_8b;
    SPI_InitTypeDefStruct.SPI_NSS = SPI_NSS_Soft;
    SPI_InitTypeDefStruct.SPI_FirstBit = SPI_FirstBit_MSB;
    SPI_InitTypeDefStruct.SPI_CPOL = SPI_CPOL_Low;
    SPI_InitTypeDefStruct.SPI_CPHA = SPI_CPHA_1Edge;
    SPI_Init(SPI2, &SPI_InitTypeDefStruct);


    
    //! SCK, MISO, MOSI
    GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitTypeDefStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitTypeDefStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitTypeDefStruct);


    //! SS
    GPIO_InitTypeDefStruct.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitTypeDefStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitTypeDefStruct.GPIO_Speed = GPIO_Speed_100MHz;
    GPIO_InitTypeDefStruct.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitTypeDefStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_Init(GPIOB, &GPIO_InitTypeDefStruct);

    //! Connect Pins to Peripheral
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_SPI2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);

    //! ENABLE SPI2
    SPI_Cmd(SPI2, ENABLE);

    //! PULL SS HIGH
    IMU1_SS_HIGH;
}

uint8_t Spi2Transfer(uint8_t Data){
    uint8_t dump = 0;

    while(!(SPI2->SR&SPI_SR_TXE));
    SPI2->DR = Data;
    while(!(SPI2->SR&SPI_SR_RXNE));
    dump = SPI2->DR;
    return (dump);
}
Wenn du ein Nucleo-Board nutzt, kannst du wahrscheinlich über SWD debuggen? Das ist schonmal eine sehr große Hilfe.
Für den Anfang würde ich alles unnütze (LED, LCD, etc...) weglassen und nurmal die Kommunikation zum laufen bringen.
Welche IDE benutzt du?

Gruß
Chris