本帖最后由 smartpower 于 2015-11-25 11:23 编辑
各位高手,小弟使用SPI遇到点小问题,烦请大家赐教。
使用SPI接口进发送接收时,每个字节间有延时,如下图所示:
使用的函数为HAL_SPI_TransmitReceive,已确认延时来自下面这句话
if(SPI_WaitOnFlagUntilTimeout(hspi, SPI_FLAG_RXNE, RESET, Timeout) != HAL_OK)
{
return HAL_TIMEOUT;
}
我的问题是:
1. 为什么会有延时,8个sck后数据应该就已收到,为什么SPI_FLAG_RXNE标志要延时约1us才能置起?
2. 将程序改为查到发送为空就发数据,查到有数据到达就收数据则发现收到的数据不对。
(已确认在这种情况下的MISO的波形是对的)
修改后的核心代码如下:
//注: TxCnt = RxCnt = 3
while ( TxCnt>0 && RxCnt>0 )
{
if ( (hspi->Instance->SR & SPI_FLAG_TXE ) != RESET ) //发送寄存器为空
{
if( TxCnt > 0 ) //数据还没有发送完成
{
hspi->Instance->DR = *pTxData++;
TxCnt--
}
}
if ( (hspi->Instance->SR & SPI_FLAG_RXNE) != RESET )
{
if( RxCnt > 0)
{
*pRxData++ = hspi->Instance->DR;
RxCnt--;
}
}
}
|