STM32的SPI速度怎么这么慢?

2019-12-14 13:23发布

本帖最后由 prince2010 于 2018-12-6 10:08 编辑

代码如下——

        SPI1_CS0_Enable();
        for(i = 0; i < 1000; i++)
        {
            SPI1->DR = DataIn;
            while(!(SPI1->SR & SPI_I2S_FLAG_RXNE)); //等待一个字节接收完
            DataOut = SPI1->DR;  //返回SPI1接收的数据
        }
        SPI1_CS0_Disable();

系统时钟72MHz,可是用示波器观察,循环体就这么几句代码,字节间发送间隔竟然达到1us!!!

大家帮忙看看

补充:以下是SPI 时钟引脚的波形。


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
26条回答
wshtyr
2019-12-15 03:14
LZ试试这个。。

  1. int txcnt, rxcnt;
  2. uint32_t sr;
  3. SPI1_CS0_Enable();
  4. txcnt = SPI1->DR;//空读
  5. txcnt = rxcnt = 0;
  6. while(1)
  7. {
  8.     sr = SPI1->SR;
  9.     if(sr & SPI_I2S_FLAG_TXE)
  10.     {
  11.         if(txcnt < 1000)
  12.             SPI1->DR = DataIn[txcnt++];
  13.     }
  14.     if(sr & SPI_I2S_FLAG_RXNE)
  15.     {
  16.         if(rxcnt < 1000)
  17.             DataOut[rxcnt++] = SPI1->DR;
  18.     }
  19.     if(rxcnt >= 1000 && txcnt >= 1000)
  20.     {
  21.         break;
  22.     }
  23. }
  24. SPI1_CS0_Disable();
复制代码

一周热门 更多>