Hello Honoju,
In theory, it didn't need extra pull-up resistors for SDO.
Under STM32 MCU platform, you could refer HAL_SPI_TransmitReceive() function to implement user_spi_read(). You need to set Size+1 when you call HAL_SPI_TransmitReceive(). And after call this function, you need copy pRxData+1 to data_reg.
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
... View more