关于STM32的SPI使用的总结

来源:本站
导读:目前正在解读《关于STM32的SPI使用的总结》的相关信息,《关于STM32的SPI使用的总结》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于STM32的SPI使用的总结》的详细说明。
简介:关于STM32的SPI使用,用库函数来实现功能很方便,但也有一些问题需要注意一下.

关于STM32的SPI使用,用库函数来实现功能很方便,但也有一些问题需要注意一下.

就是库函数中SPI_I2S_ReceiveData().当处于主机模式的时候.只是简单的去缓存搬数据而已并没有发出SCK去获取数据.当然这个从机的模式下不成问题

而用发送函数SPI_I2S_SendData,也需要先读一下缓冲后再发送数据.这个不会出现溢出OVR.

故每次不管读写SPI都要做到以下四个步骤才能正确读写

u8 SPI_FLASH_SendByte(u8 byte)

{

/* 检测缓冲是否为空 */

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

/* 通过SPI发送数据*/

SPI_I2S_SendData(SPI1, byte);

/* 等待接收数据 */

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

/* 返回读到的数据*/

return SPI_I2S_ReceiveData(SPI1);

}

以下是读写的代码

void SPI_Send_Byte(u8 byte)

{

SPI_FLASH_SendByte(byte);

}

u8 SPI_Get_Byte(void)

{

return SPI_FLASH_SendByte(0xff);

}

还有一个问题要注意一下.就是笔者在读华邦的FLASH的时候.发现读的时候.数据的最高位一直为零.后来才发现原来在配置SPI的时候有个地方需要注意一下

SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //就这个地方.需要把数据锁定在第一个波形.才不会漏掉最高位

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler =

SPI_BaudRatePrescaler_256;

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);

SPI_Cmd(SPI1, ENABLE);

当然了.最后也不要忘记把所用到GPIO,配成GPIO_Mode_AF_PP模式.把CS位配成GPIO_Mode_Out_PP

提醒:《关于STM32的SPI使用的总结》最后刷新时间 2024-03-14 01:13:45,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于STM32的SPI使用的总结》该内容的真实性请自行鉴别。