您的位置 首页 元件

STM32SPI读写函数

//SPIx读写一个字节//TxData:要写入的字节//返回值:读取到的字节u8SPIx_ReadWriteByte(u8TxData){while((SPI1->SR(11))==0)…

//SPIx读写一个字节

//TxData:要写入的字节

//回来值:读取到的字节

u8 SPIx_ReadWriteByte(u8 TxData)

{

while((SPI1->SR&(1<<1))==0);

SPI1->DR=TxData; //发送一个byte

while((SPI1->SR&(1<<0))==0);

returnSPI1->DR; //回来收到的数据

}

关于这样的读写函数曾有这样的疑问,读便是读写就写为什么要放一同呢。这样是不是很费事,查询相关材料有如下回答。

a)写一个字节:

​while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

//保证产生前Buffer为空,也便是说上一次现已产生完结

​SPI_I2S_SendData(SPI1, Data);

//​往寄存器中写入一个字节

​while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

//等候承受到一个字节数据,

为什么要这么做?加这一句的原因是为了保证这个字节现已发送出去,由于产生和承受是并行同步进行,那便是说你产生出去一个字节意味着你收到一个字节。所以这样判别彻底没有问题,再说必要性,假如你不加这句你就会简单犯过早拉高CS信号的过错(相当于检测到收到数据,那么阐明数据必定发完了),你想想假如在SPI_I2S_SendData(SPI1, Data)后边当即拉高CS是什么结果。SPI_I2S_ReceiveData(SPI1); //都会接纳到的数据,看起来没什么必要,但以用stm32的经历引荐这样做,或许会有意想不到的收成。

​SPI_Writebyte(u8data)

​{

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

SPI_I2S_SendData(SPI1, Data);

​while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

​SPI_I2S_ReceiveData(SPI1);

}

b)​读一个字节:读的时分要注意一个问题,由于从形式是无法供给时钟的,所以主形式下有必要要在接纳的一起供给时钟。方法便是发送一个字节来完成,由于仍是上面说的,发送一个字节就意味着收到一个字节,代码和写彻底相同,只要把读出来的字节保存即可。u8 SPI_Readbyte(u8data){while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, Data);while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);return SPI_I2S_ReceiveData(SPI1);}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/275415.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部