STM32F4每个数据帧之间的SPI空闲时间,为什么太长?



我试图在不到 32 毫秒的时间内从 SPI 读取 256 位,数据帧为 16 位。我的问题是 SPI 驱动程序在每个 16 位之间有很长的空闲时间。看到这张图片,正如你所看到的,我正在读取 64 位(由红色矩形突出显示(,并且每帧之间有很长的停顿。我在 SPI 规范中找不到任何关于它的内容。

我正在Keil的STM32F407板上进行测试,SPI由Keil CMSIS默认驱动程序初始化。

有没有办法减少这个空闲时间?

您可以向其他人展示代码片段以提供帮助,但无论如何,我记得遇到过同样的问题。以下是我减少额外时间间隔的方法;

使用直接注册访问而不是函数,用于发送和标志检查。

如果这也不起作用,而不是标志检查,您可以使用简单的 for 循环进行一定程度的延迟以保持时钟信号足够低但又不多,请从示波器检查以找到准确的迭代次数。

还要确保在发送消息时没有中断,传输结束和将 CLK 信号拉高的代码之间可能存在 ISR 中断。如果您的 ISR 异步发生且大小较大,则可能是这种情况。

SPI1->DR = (uint16_t)Data; while(!(SPI1->SR & SPI_SR_TXE));

PS:我已经在Cortex-M3上完成了此操作,没有RTOS,STD外围库。

编辑:也尝试仅使用繁忙的标志,从而仅检查EOCwhile(SPI1->SR & SPI_SR_BSY);

最新更新