/*## Configure the SPI4 as Master and SPI5 as Slave ###*/ Spi4Handle.Init.Direction = SPI_DIRECTION_2LINES; Spi4Handle.Init.CLKPhase = SPI_PHASE_1EDGE;//read at DCLK falling edge Spi4Handle.Init.CLKPolarity = SPI_POLARITY_HIGH;//read at DCLK falling edge Spi4Handle.Init.DataSize = SPI_DATASIZE_16BIT; Spi4Handle.Init.NSS = SPI_NSS_SOFT;// NSS pin is configured as GPIO output for /CS Spi4Handle.Init.Mode = SPI_MODE_MASTER;// SPI4 as SPI Master Spi5Handle.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;// only receive data Spi5Handle.Init.NSS = SPI_NSS_HARD_INPUT; Spi5Handle.Init.Mode = SPI_MODE_SLAVE;// SPI5 as SPI Slave /*## Enable SPI4 as Master and SPI5 as Slave to Receive AD7606B Codes ###*/ __HAL_SPI_ENABLE(&Spi4Handle); __HAL_SPI_ENABLE(&Spi5Handle); while (SPI4_CNVCount < SPI4_CNVNum) { CLR_CNV(); SET_CNV();//AD7606B conversion start // wait for conversion finish, BUSY goes from high to low. Polling or interrupt mode while (BUSY == SET) {;} while (SPI4_WordCount < SPI4_CNVWordNum)// code number to read per conversion cycle { CLR_CS(); *(__IO uint8_t *)&Spi4Handle.Instance->DR = 0; while (__HAL_SPI_GET_FLAG(&Spi4Handle, SPI_FLAG_RXNE) != SET); Delay_xus(1);// need half SCLK cycle delay for slow SCLK rate < 10MHz SET_CS(); SPI_RxBuffer[RxBuf_Idn] = *(__IO uint16_t *)&Spi4Handle.Instance->DR; SPI_RxBuffer[RxBuf_Idn+ADCSDO1_WordIdn] = *(__IO uint16_t \\ *)&Spi5Handle.Instance->DR; RxBuf_Idn++; SPI4_WordCount += 2; } SPI4_CNVCount++; RxBuf_Idn = SPI4_CNVCount * SPI4_CNVWordNum; SPI4_WordCount = 0; }//while (SPI4_CNVCount < SPI4_CNVNum) __HAL_SPI_DISABLE(&Spi4Handle); __HAL_SPI_DISABLE(&Spi5Handle);