Thanks for all the replies. I found the answer. You configure in master half duplex mode then add lines 24 to 27
HAL_StatusTypeDef MX_SPI2_Init(SPI_HandleTypeDef* hspi)
{
HAL_StatusTypeDef ret = HAL_OK;
hspi->Instance = SPI2;
hspi->Init.Mode = SPI_MODE_MASTER;
hspi->Init.Direction = SPI_DIRECTION_1LINE;
hspi->Init.DataSize = SPI_DATASIZE_8BIT;
hspi->Init.CLKPolarity = SPI_POLARITY_HIGH;
hspi->Init.CLKPhase = SPI_PHASE_2EDGE;
hspi->Init.NSS = SPI_NSS_SOFT;
hspi->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
hspi->Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi->Init.TIMode = SPI_TIMODE_DISABLE;
hspi->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi->Init.CRCPolynomial = 7;
hspi->Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
hspi->Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
if (HAL_SPI_Init(hspi) != HAL_OK)
{
ret = HAL_ERROR;
}
HAL_Delay(5);
SPI_1LINE_TX(hspi);
HAL_Delay(5);
__HAL_SPI_ENABLE(hspi);
}
In order to receive from SPI in half duplex use the following:
void LSM6DS3_WriteReg(uint8_t reg, uint8_t setting)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1,®,1,15);
HAL_SPI_Transmit(&hspi1,&setting,1,15);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
}
Note this is to read the contents of a register on an accelerometer+gyro chip
To write to said chip use code below:
uint8_t LSM6DS3_ReadReg(uint8_t reg)
{
uint8_t readMask;
uint8_t dataInReg;
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
readMask = reg|0x80;
HAL_SPI_Transmit(&hspi1,&readMask,1,15);
__HAL_SPI_DISABLE(&hspi1);
SPI_1LINE_RX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
HAL_SPI_Receive(&hspi1,&dataInReg,1,15);
__DSB();
__DSB();
__HAL_SPI_DISABLE(&hspi1);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
SPI_1LINE_TX(&hspi1);
__HAL_SPI_ENABLE(&hspi1);
return dataInReg;
}
Pin 12B is my current chip select pin. I hope this helps someone in the future