完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我要实现的功能:
用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个回答
|
|
问题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循环模式下出现的异常问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1885 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1663 浏览 1 评论
1149 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
763 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1965浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
791浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
616浏览 3评论
631浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
594浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 17:42 , Processed in 0.877361 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号