我正在使用STM32F3微控制器和HAL库。对于许多外设(例如ADC,SPI,I2C),HAL库提供了三种读取/写入数据的方式:轮询模式,中断模式和DMA模式。我知道我不希望使用轮询模式,因为它处于阻塞状态。但是,我不确定如何在中断和DMA模式之间进行选择。有一般的经验法则吗?我觉得DMA模式应该总是更好,因为它可以在无需CPU干预的情况下将值写入内存?
答案 0 :(得分:1)
DMA的优点是它不需要CPU干预。 DMA传输可以在CPU忙于做其他事情时或空闲时运行。
DMA的一些缺点是:
大多数微控制器的DMA通道数量有限,因此可能无法将DMA用于所有外围设备。
当需要进行许多小的传输时,例如建立和执行DMA传输的开销可能会抵消其好处。通过USART接收单个字符时。
DMA通常不支持与设备的异常交互(例如与某些SPI设备的双向数据传输)。
DMA传输在微控制器的总线矩阵上增加了较重(且较难预测)的负载,使它们成为勘误的常见来源。
一般来讲,我建议反对使用DMA来实现I 2 C。该协议通常只在100-200 kHz上运行,因此使用中断不会对微控制器造成特别大的负担。