SPI从机返回主机数据问题

2019-07-19 21:05发布

SPI主机发送数据至从机,从机返回接收到的数据以确认传输正常。 由于SPI是环形通信,即SPI主机从MISO中读回数据时,读取的是发送时从机中得SPI缓存。 [mw_shl_code=c,true]INTERRUPT_HANDLER(SPI_IRQHandler, 10) { /* 如果接收到数据 */ if((SPI->SR & SPI_FLAG_RXNE) != RESET) { byte = SPI->DR;//接收主机数据 while( !(SPI->SR & SPI_FLAG_TXE) ); SPI->DR = byte;//企图写回,但实际上本次写入的数据将在下一次被主机读取 } }[/mw_shl_code] 所以我现在的解决办法是: [mw_shl_code=c,true]SPI_SendByte(67); response = SPI_SendByte(67); UART2_SendData(response); SPI_SendByte('('); response = SPI_SendByte('('); UART2_SendData(response); SPI_SendByte(')'); response = SPI_SendByte(')'); UART2_SendData(response);[/mw_shl_code] 发送两次,接收第二次的从机数据。 但是这样处理的话明显导致SPI的传输效率下降一半。
想请教一下,不知道大家有没有更好的解决方法。
 
SPI->DR = byte;//这一次写入的数据将在下一次被主机读取SPI->DR = byte;//这一次写入的数据将在下一次被主机读取
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。