2018-07-25 10:12 PM
2018-07-25 10:14 PM
how to flush the FIFO in the SPI RX buffer.
2018-07-25 11:06 PM
I used,
//test the rx fifo level and flush any residual data
while(LL_SPI_GetRxFIFOLevel(SPI2) != LL_SPI_RX_FIFO_EMPTY)
{
LL_SPI_ReceiveData8(SPI2); //read to empty fifo
}The other "gotcha" I found was that after configuring for 8 bit transfers, you have to independently set the FRXTH bit in CR2 so that received data is flagged after a single byte is received.
//SPI2 is on APB1 54 MHz : this configures for 8 bit byte transfers
SPI_InitStructure.TransferDirection = LL_SPI_FULL_DUPLEX;
SPI_InitStructure.Mode = LL_SPI_MODE_MASTER;
SPI_InitStructure.DataWidth = LL_SPI_DATAWIDTH_8BIT;
SPI_InitStructure.ClockPolarity = LL_SPI_POLARITY_HIGH; //clock rests high
SPI_InitStructure.ClockPhase = LL_SPI_PHASE_2EDGE; //slave latch data on rising edge
SPI_InitStructure.NSS = LL_SPI_NSS_SOFT;
SPI_InitStructure.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV32 ; //54MHz / 32 ~ 1.6875 MHz
SPI_InitStructure.BitOrder = LL_SPI_MSB_FIRST;
SPI_InitStructure.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
SPI_InitStructure.CRCPoly = 7;
LL_SPI_Init(SPI2, &SPI_InitStructure);
//set CR2 bit FRXTH (so that RXNE is generated on reception of 8 bit)
LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER);
2018-07-26 5:58 AM
I just do two quick 16-bit reads of the Data Register at a point I know nothing's being clocked in at the same time. The FIFO's only 32 bits deep and it does no harm to read it if it's already empty.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.