AnsweredAssumed Answered

STM32F103RB SPI latency

Question asked by carbonera.felipe on Feb 4, 2013
Latest reply on Feb 4, 2013 by carbonera.felipe
Hi all,
I trying to use the SPI and I am using uVision Keil.
The clock appear with a latency that I can take off by removing while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
But when I do that I read wrong the data.
The 3 last bytes is what I have to read from ADS1256. The first byte is the command for read the conversion (ADC).
Here's the code:
/* SPI1 configuration ------------------------------------------------------*/
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);   /* Enable SPI1 */
  
SPI_I2S_SendData(SPI1, 0x01);      /* Send SPI1 data (LEITURA ADS1241)*/
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI1);
  
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0){} /* Espera conversão*/
  
while (TxIdx < 3){
  
 SPI_I2S_SendData(SPI1, 0x00); /* Send SPI1 data */
 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
 SPI1_Buffer_Rx[TxIdx] = SPI_I2S_ReceiveData(SPI1);
 TxIdx++;
}
  
  TxIdx=0;


And here's the latency. If I use the SPI_BaudRatePrescaler with 128 the latency go away.  But its too slow. 


spi%20ads1241.png

I hope somebody can help me cuz  I really need this done and I have no ideia what is going on.

Outcomes