【发布时间】:2020-06-17 15:29:29
【问题描述】:
ST 有一些应用笔记讨论了使用 DMA 到 GPIO 模拟并行总线。我很欣赏这一点,但它并没有回答重要的问题。我正在翻阅参考手册,但似乎无法澄清我所关心的事情。
我最关心的是抖动。参考手册反复指出,当 DMA 被触发(例如,通过定时器)时,DMA 控制器将读取内存并将值传输到外设。对于具有自己的 FIFO 的外围设备来说,这可能没问题。在那里,当 FIFO 中有可用空间时,将触发 DMA 并填充 FIFO。这可能会在 FIFO 变空之前发生。
但是对于 GPIO,如果 DMA 通道本身没有 FIFO,则在定时器触发时数据不会准备好,需要从 SRAM 中获取。因此,在定时器触发和实际到达 GPIO 输出寄存器的值之间,可能会经过一段时间。在查看定时器和 GPIO 引脚的时钟输出时,这可能是可测量的。 DMA 控制器必须与正在运行的程序竞争对 SRAM 的访问,因此程序的某些活动可能会增加抖动。
也许这对我来说是一个巨大的疏忽,但 ST 的参考手册似乎没有提到 FIFO 作为 DMA 的一部分。如果是这种情况,则会导致抖动,这可能会影响更高频率的性能。
我需要将 3 到 4 个引脚同步切换到 100kHz 到 1MHz 的时钟。我正在考虑 DMA 到 GPIO 并且还滥用 QuadSPI 控制器。我目前正在测试 STM32L4,但我也在考虑 STM32F4 甚至 F1。
【问题讨论】:
-
你知道这是哪个应用笔记吗?我在 STM32H743 上实现了一个 1 MHz 的并行总线作为测试,然后围绕 STM32F407 构建了一个电路,现在我无法让它以相同的方式工作(DMA 不会在定时器和/或 DMA 传输上触发错误和/或其他问题)。
-
我相信我指的是 AN4666:st.com/resource/en/application_note/…
标签: timer stm32 gpio dma stm32f4