STM32F0系列SPI问题
刚着手移植STM32F030系列平台上,调SPI时发现个问题,使用SPI_I2S_SendDate16和SPI_I2S_ReceiveData16函数都没问题;但使用SPI_SendDate8和SPI_ReceiveData8收发时会卡在接收非空标志位SPI_I2S_FLAG_RXNE处,去掉检查标志位后会发现每次收到的数据是前一次SPI返回的数据,但程序原先使用的都是8位收发,改成16位有些麻烦,不知道应该如何解决,望指导RE:STM32F0系列SPI问题
发的什么样的数据就用对应什么样的函数吧回复:STM32F0系列SPI问题
应该是你的SPI配置问题。这个是以前用在051R8上的SPI读写函数,可以参考一下
/*******************************************************************************
函数名称:SD_Write_Byte()
功 能:向SPI总线发送一个数据
参 数:无
返回值 :无
********************************************************************************/
void SD_Write_Byte(unsigned char dat)
{
/* 判断发送缓冲是否为空 */
while(SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* 发送字节 */
SPI_SendData8(SD_SPI, dat);
/* 判断接收缓冲是否为空*/
while(SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* flush data read during the write */
SPI_ReceiveData8(SD_SPI);
}
/*******************************************************************************
函数名称:SD_Read_Byte()
功 能:从SPI总线读取一个数据
参 数:无
返回值 :无
*******************************************************************************/
unsigned char SD_Read_Byte(void)
{
unsigned char Data = 0;
/* 判断发送缓冲是否为空 */
while (SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_TXE) == RESET)
{
}
/* 发送字节 */
SPI_SendData8(SD_SPI, 0xFF);
/* 判断接收缓冲是否为空 */
while (SPI_I2S_GetFlagStatus(SD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
{
}
/* 获取接收到的数据 */
Data = SPI_ReceiveData8(SD_SPI);
return Data;
}
页:
[1]