问题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循环模式下出现的异常问题。
问题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循环模式下出现的异常问题。
举报