demi 在 提交
SPI四种模式详解图解及源码:
//SPI的模式1: u8 SPI_ReadWriteOneByte(u8 tx_data) { u8 i,rx_data=0; SCK=0; //空闲电平(默认初始化情况) for(i=0;i<8;i++) { /*1. 主机发送一位数据*/ SCK=0;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=1; //告诉从机,主机数据发送完毕 tx_data<<=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data<<=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<8;i++) { /*1. 主机发送一位数据*/ SCK=1;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=0; //告诉从机,主机数据发送完毕 tx_data<<=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data<<=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<8;i++) { /*1. 主机发送一位数据*/ SCK=1;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=0; //告诉从机,主机数据发送完毕 tx_data<<=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data<<=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<8;i++) { /*1. 主机发送一位数据*/ SCK=0;//告诉从机,主机将要发送数据 if(tx_data&0x80)MOSI=1; //发送数据 else MOSI=0; SCK=1; //告诉从机,主机数据发送完毕 tx_data<<=1; //继续发送下一位 /*2. 主机接收一位数据*/ rx_data<<=1; //默认认为接收到0 if(MISO)rx_data|=0x01; } SCK=1; //恢复空闲电平 return rx_data; }
版权声明:本文为CSDN博主「void*_」的原创文章,
遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36612961/article/details/89349880