STM32-如何在HAL库中为外设R / W选择DMA还是中断

时间:2019-09-10 05:49:56

标签: arm interrupt stm32 dma

我正在使用STM32F3微控制器和HAL库。对于许多外设(例如ADC,SPI,I2C),HAL库提供了三种读取/写入数据的方式:轮询模式,中断模式和DMA模式。我知道我不希望使用轮询模式,因为它处于阻塞状态。但是,我不确定如何在中断和DMA模式之间进行选择。有一般的经验法则吗?我觉得DMA模式应该总是更好,因为它可以在无需CPU干预的情况下将值写入内存?

1 个答案:

答案 0 :(得分:1)

DMA的优点是它不需要CPU干预。 DMA传输可以在CPU忙于做其他事情时或空闲时运行。

DMA的一些缺点是:

  • 大多数微控制器的DMA通道数量有限,因此可能无法将DMA用于所有外围设备。

  • 当需要进行许多小的传输时,例如建立和执行DMA传输的开销可能会抵消其好处。通过USART接收单个字符时。

  • DMA通常不支持与设备的异常交互(例如与某些SPI设备的双向数据传输)。

  • DMA传输在微控制器的总线矩阵上增加了较重(且较难预测)的负载,使它们成为勘误的常见来源。

一般来讲,我建议反对使用DMA来实现I 2 C。该协议通常只在100-200 kHz上运行,因此使用中断不会对微控制器造成特别大的负担。