代码之家  ›  专栏  ›  技术社区  ›  Manu NALEPA

STM32F0 SPI环回-MISO上无数据

  •  1
  • Manu NALEPA  · 技术社区  · 11 年前

    我正在尝试环回STM32F0上的SPI总线(使用发现板, 味噌 引脚连接到 金属氧化物半导体 引脚)。

    我正在学习教程 Discovering the STM32 Microcontroller ,(2014年1月18日版), 练习6.1:SPILoopback .

    STM32配置为主机。

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

    SPI_I2S_SendData (SPIx, *tbuf++);
    

    哪里:

    • SPIx公司 是我要发送数据的SPI总线
    • tbuf公司 单位8 (换言之 无符号字符 …)我想送你上车

    为了从MISO引脚接收这个字节,他写道:

    while (SPI_I2S_GetFlagStatus (SPIx, SPI_I2S_FLAG_RXNE) == RESET);
    if (rbuf)
    {
        *rbuf++ = SPI_I2S_ReceiveData(SPIx);
    ...
    ...
    

    国旗 SPI_I2S_FLAG_RXNE 应该是 集合 因为我向 金属氧化物半导体 引脚,以及自 金属氧化物半导体 引脚连接到 味噌 大头针

    我的问题是:

    我从不离开 虽然 循环( SPI_I2S_FLAG_RXNE 永远不会 集合 ,即使我查看调试器。

    (我明白了 CLK公司 金属氧化物半导体 在我的逻辑分析仪上是活的,所以我确信从电学的角度来看,我的字节会消失。)

    这就像STM32从未接收到字节,即使 味噌 针脚已连接 金属氧化物半导体 大头针

    为什么?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Manu NALEPA    11 年前

    这是因为 第32页第0页 ,旗帜 SPI_I2S_FLAG_RXNE 默认情况下,仅当在 味噌 大头针

    如果您发送2个字节和 然后 你…吗 虽然 循环,您应该很快退出循环。

    这个 参考手册 所述(节 SPI状态标志 ) :

    RXNE标志根据SPIx_CR2寄存器中的FRXTH位值设置:

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

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

    所以,如果你想要国旗 SPI_I2S_FLAG_RXNE 要在仅接收到1个字节时设置,应使用以下函数:

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