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;//这一次写入的数据将在下一次被主机读取
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>