FLAG_RXNE位,可以换成查询busy,检测忙状态。我之前也也到过这个问题 即换成SPI_I2S_FLAG_BSY ...
由于使用了接收标志,所以spi必须设置为全双工模式,在单线发送模式下,SPI_I2S_FLAG_RXNE标志一直不会置位,就无法判断发送完成。 解决方案 u8SPI1_ReadWriteByte(u8 Byte){//通过SPI2口发送1个数据,同时接收1个数据 如果失败返回0while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}//等待发...
I2S_FLAG_RXNE) == RESET);看看得不得。或者干脆直接把SPI_I2S_FLAG_RXNE写成0x0001或0x0003 ...
if(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) != RESET) { if(spi_flag_pi[1]==1){//data can change spi_flag_pi[1]=0; spi_dt[0] = Get_Cycle_T(16); timer_sys+=spi_dt[0]; if(timer_sys>0.1){timer_sys=0; slave_send(3);//系统状态 }else{ if(send_flag==1){ se...
SPI_I2S_SendData(SPI1, TxData);//通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)//检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200)return 0; } return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据...
SPI_I2S_SendData(SPI1,Data); While(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);//等待接收到一个字节数据 return SPI_I2S_ReceiveData(SPI1); } 解析:当不使用FIFO时,只有一个中断,接收和发送共用一个,因为发送和接收是同时完成的:例如主机上升沿发送...
SPI_I2S_SendData(SPI2, TxData); //通过外设SPIx发送一个byte 数据 while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) { } //等待接收完一个byte return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据 } HLA库: ...
SPI传输数据。调用函数:void SPI_I2S_SendData();uint16_t SPI_I2S_ReceiveData(); 查看SPI传输状态。调用函数:SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE)。 下面按照这个一般步骤来进行一个简单的SPI程序: void SPI2_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; ...
SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE); 1. 发送 SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) 1. 设置SPI2速度函数 单独的设置分频系数的函数 //SPI 速度设置函数 //SpeedSet://SPI_BaudRatePrescaler_256 256 分频 (SPI 281.25K@sys 72M) ...
SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个byte 数据 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一个byte return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据 } //SPI写寄存器 ...