djj3343 发表于 2013-10-2 16:57:09

STM32F0系列SPI问题

刚着手移植STM32F030系列平台上,调SPI时发现个问题,使用SPI_I2S_SendDate16和SPI_I2S_ReceiveData16函数都没问题;但使用SPI_SendDate8和SPI_ReceiveData8收发时会卡在接收非空标志位SPI_I2S_FLAG_RXNE处,去掉检查标志位后会发现每次收到的数据是前一次SPI返回的数据,但程序原先使用的都是8位收发,改成16位有些麻烦,不知道应该如何解决,望指导

发表于 2013-10-8 20:47:30

RE:STM32F0系列SPI问题

发的什么样的数据就用对应什么样的函数吧

fengye5340 发表于 2013-10-9 11:45:18

回复: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]
查看完整版本: STM32F0系列SPI问题