STM32F205 SPI RXNE 标志未设置

标签 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 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 标志处。我试图等待忙标志 BSY = 0而不是 RXNE = 1 SPI开始工作。似乎从未设置过 RXNE。

最佳答案

我问你的SPI通信是8位的? (uint8_t 结果 = SPI1->DR)。在 STM32F051 上,我遇到了同样的问题,接收 1 个字节后未设置 RXNE 标志。问题是STM默认在16位后触发这个标志。
在 STM32F0 中,我找到了解决方案(它可能在 F2 中是相同的):

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

所以设置这个位,你可以使用 API 指令来做到这一点:
SPI_RxFIFOThresholdConfig(SPIx, SPI_RxFIFOThreshold_QF);

希望能帮助到你,
来自波兰的祝福

关于STM32F205 SPI RXNE 标志未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610019/

相关文章:

stm32 - 使用 HAL 驱动程序在 stm32 上进行 EEPROM 仿真

debugging - 使用 SysTick_Config 后无法调试

c - 使用 Atmega32 和 At42QT2100 的 SPI

c - STM32 SPI 发送

java - SPI 出现 Guice 错误

c - STM32F7 Discovery - USB FS主机/设备模式检测

c - 跳转到stm32f4上的第二个固件

arm - 如何修复 STM32CubeProgrammer 未找到 STM32 目标

USB转SPI转换器

c - 丢失的字母去哪儿了?