跳转到主要内容

SPI时序详解

demi 提交于

SPI四种模式详解图解及源码:

<img width="600" src="http://mcu.eetrend.com/files/2020-06/博客/100049834-99633-45.png&quot; alt="SPI时序详解"><br>

<pre style="overflow-x:auto; background-color:#e9e9e9;">//SPI的模式1:
u8 SPI_ReadWriteOneByte(u8 tx_data)
{
u8 i,rx_data=0;
SCK=0; //空闲电平(默认初始化情况)
for(i=0;i&lt;8;i++)
{
/*1. 主机发送一位数据*/
SCK=0;//告诉从机,主机将要发送数据
if(tx_data&0x80)MOSI=1; //发送数据
else MOSI=0;
SCK=1; //告诉从机,主机数据发送完毕
tx_data&lt;&lt;=1; //继续发送下一位

/*2. 主机接收一位数据*/
rx_data&lt;&lt;=1; //默认认为接收到0
if(MISO)rx_data|=0x01;
}
SCK=0; //恢复空闲电平
return rx_data;
}

//SPI的模式2:
u8 SPI_ReadWriteOneByte(u8 tx_data)
{
u8 i,rx_data=0;
SCK=0; //空闲电平(默认初始化情况)
for(i=0;i&lt;8;i++)
{
/*1. 主机发送一位数据*/
SCK=1;//告诉从机,主机将要发送数据
if(tx_data&0x80)MOSI=1; //发送数据
else MOSI=0;
SCK=0; //告诉从机,主机数据发送完毕
tx_data&lt;&lt;=1; //继续发送下一位

/*2. 主机接收一位数据*/
rx_data&lt;&lt;=1; //默认认为接收到0
if(MISO)rx_data|=0x01;
}
SCK=0; //恢复空闲电平
return rx_data;
}

//SPI的模式3:
u8 SPI_ReadWriteOneByte(u8 tx_data)
{
u8 i,rx_data=0;
SCK=1; //空闲电平(默认初始化情况)
for(i=0;i&lt;8;i++)
{
/*1. 主机发送一位数据*/
SCK=1;//告诉从机,主机将要发送数据
if(tx_data&0x80)MOSI=1; //发送数据
else MOSI=0;
SCK=0; //告诉从机,主机数据发送完毕
tx_data&lt;&lt;=1; //继续发送下一位

/*2. 主机接收一位数据*/
rx_data&lt;&lt;=1; //默认认为接收到0
if(MISO)rx_data|=0x01;
}
SCK=1; //恢复空闲电平
return rx_data;
}

//SPI的模式4:
u8 SPI_ReadWriteOneByte(u8 tx_data)
{
u8 i,rx_data=0;
SCK=1; //空闲电平(默认初始化情况)
for(i=0;i&lt;8;i++)
{
/*1. 主机发送一位数据*/
SCK=0;//告诉从机,主机将要发送数据
if(tx_data&0x80)MOSI=1; //发送数据
else MOSI=0;
SCK=1; //告诉从机,主机数据发送完毕
tx_data&lt;&lt;=1; //继续发送下一位

/*2. 主机接收一位数据*/
rx_data&lt;&lt;=1; //默认认为接收到0
if(MISO)rx_data|=0x01;
}
SCK=1; //恢复空闲电平
return rx_data;
}
</pre>

版权声明:本文为CSDN博主「void*_」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36612961/article/details/89349880