STM32
直播中

李建设

8年用户 1469经验值
私信 关注
[问答]

求助,STM32F030 ADC_CFGR1中DMACFG的使用问题求解

我要实现的功能:
STM32F030  3个ADC通道采样电压,每个通道转换10次后,做一次处理。

1、ADC_CFGR1中DMACFG 设置为0,DMA单次模式。

  DMA传输 30个数据后。ADC不再产生DMA请求。
问题1:DMA单次模式下,我处理完30个数据后,想再一次让ADC产生DMA请求。应该怎样操作?设置哪个位?

2、ADC_CFGR1中DMACFG 设置为0,DMA循环模式。
DMA传输 30个数据后,触发DMA传输完成中断,通过DMA_CCR_EN 暂时关闭DMA传输。处理完数据后,再通过DMA_CCR_EN打开DMA。
这样的做法,运行一会后,会出现异常,不能进入DMA传输完成中断!

回帖(1)

杨万富

2024-4-26 17:26:37
问题1:在STM32F030的ADC_CFGR1中,DMACFG设置为0表示DMA单次模式。在这种情况下,当DMA传输完成30个数据后,ADC不再产生DMA请求。为了再次让ADC产生DMA请求,您需要重新启动ADC转换。以下是操作步骤:

1. 确保DMA传输已经完成。
2. 清除ADC的CR寄存器中的ADSTART位,以停止当前的ADC转换。
3. 重新设置ADC的CR寄存器中的ADSTART位,以开始新的ADC转换。

这样,ADC将开始新的转换,并在转换完成后再次产生DMA请求。

问题2:在ADC_CFGR1中,DMACFG设置为0表示DMA循环模式。在这种情况下,DMA传输30个数据后,触发DMA传输完成中断。您提到的做法是关闭DMA传输,处理完数据后再打开DMA。如果运行一段时间后出现异常,可能的原因有:

1. 中断服务例程(ISR)中处理数据的时间太长,导致ADC转换数据积压,无法及时处理。
2. DMA传输完成后,没有正确重新启动ADC转换。

为了解决这个问题,您可以尝试以下方法:

1. 优化ISR中的数据处理时间,确保在ADC转换完成之前完成数据处理。
2. 在ISR中,除了关闭DMA传输外,还需要重新启动ADC转换。这可以通过重新设置ADC的CR寄存器中的ADSTART位来实现。

通过这些方法,您应该能够解决在DMA循环模式下出现的异常问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分