SPI_I2S_SendData(SPI1, byte); //往发送寄存器写入要发送的数据 /* Wait to receive a byte */ while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//如果接收寄存器没有收到数据,循环 /* Return the byte read from the SPI bus */ return SPI_I2S_ReceiveData(SPI1); } /* ...
SPI_I2S_SendData(SPI1,ByteSend);//将数据写入到TDR寄存器里面,之后数据会自动写入道移位寄存器 while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) != SET);//等待RXNE标志位置1,移位寄存器将数据移动到RDR //读取DR寄存器后会将RXNE标志位清除 return SPI_I2S_ReceiveData(SPI1);//读取RDR中的数据 } ...
SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)来发送指定的数据。 在进行SPI接受数据时我们需要用到库函数: SPI_I2S_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_I2S_FLAG) 来判断指定的SPI的标志位,在本实验中,检查指定的SPI标志位设置与否:接受缓存非空标志位。 SPI_I2S_ReceiveData(SPI_TypeDe...
void SPI_SendByte(SPI_TypeDef* SPIx,u8 SPI_SendData){ while(SPI_I2S_GetFlagStatus(SPIx, SPI_...
received_data = SPI_I2S_ReceiveData(SPIx);// 写入数据 SPI_I2S_SendData(SPIx, data);while(SPI_...
SPI_I2S_SendData(SPIx, byte); /* Wait for the transfer to complete */ while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET); /* Return the received byte */ return SPI_I2S_ReceiveData(SPIx); } int main(void) {
通过检测TXE标志,获取发送缓冲区的状态,若发送缓冲区为空,则表示可能存在的上一个数据已经发送完毕;等待至发送缓冲区为空后,调用库函数SPI_I2S_SendData把要发送的数据“TxData”写入到SPI的数据寄存器DR,写入SPI数据寄存器的数据会存储到发送缓冲区,由SPI外设发送出去;写入完毕后等待RXNE事件,即接收缓冲区非空事件。
{// 等待发送缓冲区空}SPI_I2S_SendData(SPI1, txData[i]);while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) {// 等待接收缓冲区非空} rxData[i] =SPI_I2S_ReceiveData(SPI1); } }intmain(void){// 系统初始化// 配置SPI引脚// 初始化SPI控制器SPI_Init();// 主设备选中从...
其中,SPI_I2S_GetFlagStatus();函数为检测标志位的库函数,SPI_I2S_SendData();和SPI_I2S_ReceiveData();为接收和发送数据的库函数。 SPI初始化 上述程序实现了接收和发送一个字节。 那SPI初始化配置是如何的呢? 上图为SPI初始化函数。 1:1处我们看出,我们可以用此SPI与多种设备进行通信。如果我们想用一个SPI...
我们先从main文件了解一下程序的执行流程 复制 int main(void){ u16 i;USART1_Config();for(i=0;...