STM32F0 SPI环回-无MISO数据

STM32F0 SPI环回-无MISO数据,stm32,spi,Stm32,Spi,我正在尝试在我的STM32F0上回送SPI总线(使用发现板,MISO引脚连接到MOSI引脚) 我正在学习教程(2014年1月18日版),练习6.1:SPI环回 STM32被配置为主机 为了向MOSI引脚发送一个字节,作者写道: SPI_I2S_SendData(SPIx,*tbuf++); 其中: SPIx是我要发送数据的SPI总线 tbuf是我想在总线上发送的uint8(换句话说,是一个未签名的字符…) 为了从MISO引脚接收这个字节,他写道: while(SPI_I2S_GetFlag

我正在尝试在我的STM32F0上回送SPI总线(使用发现板,MISO引脚连接到MOSI引脚)

我正在学习教程(2014年1月18日版),练习6.1:SPI环回

STM32被配置为主机

为了向MOSI引脚发送一个字节,作者写道:

SPI_I2S_SendData(SPIx,*tbuf++);
其中:

  • SPIx是我要发送数据的SPI总线
  • tbuf是我想在总线上发送的uint8(换句话说,是一个未签名的字符…)
为了从MISO引脚接收这个字节,他写道:

while(SPI_I2S_GetFlagStatus(SPIx,SPI_I2S_FLAG_RXNE)=重置);
if(rbuf)
{
*rbuf++=SPI_I2S_接收数据(SPIx);
...
...
应设置标志SPI_I2S_标志RXNE,因为我向MOSI引脚发送数据,并且MOSI引脚连接到MISO引脚

我的问题是: 我从不退出while循环(SPI_I2S_FLAG_RXNE从未设置,即使我查看了调试器)

(我看到CLK和MOSI在我的逻辑分析仪上是活动的,所以我确信我的字节从电气的角度出发了。)

这就像STM32从未收到字节,即使MISO引脚连接在MOSI引脚上

为什么?

这是因为在STM32F0上,只有在MISO引脚上接收到16位(2字节)时,才默认设置SPI_I2S_flag_RXNE标志

如果您发送2个字节并,那么在循环时执行,您应该很快退出循环

参考手册说明(SPI状态标志部分):

RXNE标志的设置取决于SPIx_CR2寄存器中的第X位值:

  • 如果设置了FRXTH,则RXNE变高并保持高电平,直到RXFIFO电平大于或等于1/4(8位)

  • 如果清除FRXTH,则RXNE变为高电平并保持高电平,直到RXFIFO电平大于或等于1/2(16位)

因此,如果希望在仅接收到1个字节时设置标志SPI_I2S_flag_RXNE,则应使用以下功能:

SPI_rxfiothresholdconfig(SPIx,SPI_rxfiothreshold_QF);
  • 如果FIFO级别大于或等于1/4,则生成SPI_RxFIFOThreshold_QF:RXNE事件
  • 如果FIFO级别大于或等于1/2(默认值),则会生成SPI_RxFIFOThreshold_HF:RXNE事件