Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未设置STM32F205 SPI RXNE标志_Stm32_Spi - Fatal编程技术网

未设置STM32F205 SPI RXNE标志

未设置STM32F205 SPI RXNE标志,stm32,spi,Stm32,Spi,我在主模式下使用STM32F205的SPI1。并且在事务处理期间从不设置RXNE标志。以下是SPI初始化的一部分: SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE; SPI1->CR2 = 0; 然后我尝试执行单个字节的发送/接收: while(!(SPI1->SR & SPI_FLAG_TXE)) {} // wait for compeltion of the previous

我在主模式下使用STM32F205的SPI1。并且在事务处理期间从不设置RXNE标志。以下是SPI初始化的一部分:

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE;
SPI1->CR2 = 0;
然后我尝试执行单个字节的发送/接收:

while(!(SPI1->SR & SPI_FLAG_TXE)) {}  // wait for compeltion of the previous Tx
SPI1->DR = 0xAB;                      // transmit some byte

while(!(SPI1->SR & SPI_FLAG_RXNE)) {}  // wait for byte to be received
uint8_t result = SPI1->DR;
此代码在等待RXNE标志处阻塞。我尝试等待busy标志
BSY=0
而不是
RXNE=1
,SPI开始工作。似乎RXNE从未设置过。

仅建议:

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE;
SPI1->CR2 = 0;

在写入CR2寄存器之前,您正在启用SPI。反转上述设置或仅在写入CR2后启用SPI。

我想知道您的SPI通信是否为8位?(uint8_t result=SPI1->DR)。在STM32F051上,我有相同的问题。接收1字节后,未设置RXNE标志。问题是STM默认在16位后触发此标志。 在STM32F0中,我找到了解决方案(可能在F2中也是如此):

RXNE标志的设置取决于SPIx_CR2寄存器中的第X位值: 如果设置了FRXTH,则RXNE变高并保持高电平,直到RXFIFO电平大于或等于1/4(8位)。如果清除FRXTH(默认),RXNE将变为高电平并保持高电平,直到RXFIFO电平大于或等于1/2(16位)

因此,设置此位可以使用API指令: SPI_rxfiothresholdconfig(SPIx,SPI_rxfiothreshold_QF)

希望有帮助,
来自波兰的祝福

我对
STM32L072CZ
也有同样的问题。 我的解决方案是启用
SPI\u CR2\u SSOE
位。 我仍然没有使用SPI1从机选择引脚来选择从机,我使用的是软件GPIO引脚

SPI1->CR1 = SPI_CR1_MSTR | SPI_CR1_BR | SPI_CR1_SSM;
SPI1->CR2 = SPI_CR2_SSOE |SPI_CR2_RXNEIE;
SPI1->CR1 |= SPI_CR1_SPE;

第一个问题是,您是否在适当的RCC寄存器中启用了SPI1时钟?另一个-什么是
SPI\u FLAG\u TXE
,为什么不使用标准标题中的
SPI\u SR\u TXE
。是的,我启用了时钟。如果我选中标志BSY=0,SPI将发送数据并能够接收数据。但我从未见过RXNE的旗帜被设置。2.都一样。我从STM的标题
#define SPI_FLAG_TXE SPI_SR_TXE