HAL_DAC_Stop_DMA 和 HAL_DAC_Stop 有什么区别?
What is the difference between a HAL_DAC_Stop_DMA vs a HAL_DAC_Stop?
我 运行 通过 stmf303re 核的 DAC 进行 DMA 传输,想知道 HAL_DAC_Stop_DMA 与 HAL_DAC_Stop 之间是否存在差异?我问这个是因为在我的代码中,我之前只使用了 HAL_DAC_Stop 并且它工作正常,但是我现在看到还有一个 HAL_DAC_Stop_DMA 并且想知道有什么区别?
如果您使用 DMA 启动它,您应该使用等效功能停止它。如果您使用 non-DMA 停止功能,ADC 将停止,但 DMA 仍在 运行 等待 ADC 告诉它有更多数据可用。显然这永远不会发生,所以系统处于一种有趣的状态。也许下一个启动函数可以整理这个有趣的状态,也可能不能。如果您想了解确切的细节,请阅读函数的源代码。
不使用DMA停止功能的另一个可能问题是ADC最后产生的数据仍在被DMA复制。这意味着您的目标缓冲区尚未准备好供您使用。这是否会导致问题取决于您的代码读取目标缓冲区的时间。
我 运行 通过 stmf303re 核的 DAC 进行 DMA 传输,想知道 HAL_DAC_Stop_DMA 与 HAL_DAC_Stop 之间是否存在差异?我问这个是因为在我的代码中,我之前只使用了 HAL_DAC_Stop 并且它工作正常,但是我现在看到还有一个 HAL_DAC_Stop_DMA 并且想知道有什么区别?
如果您使用 DMA 启动它,您应该使用等效功能停止它。如果您使用 non-DMA 停止功能,ADC 将停止,但 DMA 仍在 运行 等待 ADC 告诉它有更多数据可用。显然这永远不会发生,所以系统处于一种有趣的状态。也许下一个启动函数可以整理这个有趣的状态,也可能不能。如果您想了解确切的细节,请阅读函数的源代码。
不使用DMA停止功能的另一个可能问题是ADC最后产生的数据仍在被DMA复制。这意味着您的目标缓冲区尚未准备好供您使用。这是否会导致问题取决于您的代码读取目标缓冲区的时间。