定时器触发ADC,DMA搬运,只能搬运一次
想实现定时器1在PWM模式下,在上升沿触发ADC,然后通过DMA搬运,我把ADC连续转换模式打开,然后都是正常。如果使用定时器触发应该不能使用连续模式,我把连续模式关闭后,ADC仿真只有一次转换,然后就不能转换了,大家帮忙看下怎么回事,LL库刚使用,还有很多不懂,感谢大家了。使用的是LL库你要把连续模式打开,每次定时器的timepu触发DMA,进行1次ADC chenjinyu 发表于 2021-12-29 20:27
你要把连续模式打开,每次定时器的timepu触发DMA,进行1次ADC
不对吧,我看别人写的是禁止连续模式转换,这样的话只有第一次是ADC触发的,后面都不是了,我测试也是发现这个问题,ADC波动很大,之前我们再定时器中断转换ADC,波动很小 没看到你设置触发源。现有的一次触发是软件触发的 xch 发表于 2021-12-29 22:52
没看到你设置触发源。现有的一次触发是软件触发的
设置了,定时器1触发的 CFGR寄存器要配置一下......... 爱随缘2013 发表于 2021-12-29 22:56
设置了,定时器1触发的
xch 发表于 2021-12-29 23:29
已经设置了,我看例程打开DMA中断,我试了一下还是不行 我在用STM32F373的SDADC的时候也碰到类似的问题,貌似每次转换后HAL有个状态要重置才能执行下次操作,估计是为了保护ADC结果不修改 爱随缘2013 发表于 2021-12-29 23:38
已经设置了,我看例程打开DMA中断,我试了一下还是不行
先用软件触发,看看DMA 是不是工作。
这句去掉是不是一次触发都没了?
CFGR 寄存器设置 要确认一下修改成功没。这个寄存器不是随便可以修改的。
从你贴的文字可以看出你啥都没做就上网提问了。我们不是兽医,也需要一些互动数据。
xch 发表于 2021-12-30 10:03
先用软件触发,看看DMA 是不是工作。
这句去掉是不是一次触发都没了?
对的,去掉就没有触发了,我再看下CFGR寄存器 爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器
看你的程序流程对ADC设置后进行了一次校准,应该是校准破坏了设置。
建议先校准,然后保存校准值。然后设置ADC,然后恢复校准值... 爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器
然后,去掉那个多余的软件触发。
应当改成启动定时器。它的触发输出就能启动ADC。
完成DMA “搬运”后,在DMA完成中断服务之中关闭定时器、ADC、DMA。 本帖最后由 香水城 于 2021-12-30 13:00 编辑
按理是定时器触发一次做一轮ADC转换,所以不要开启ADC的连续模式。
注意DMA配置那块有无问题。
这篇基于HAL库的供参考:
定时器触发STM32 ADC的采样转换示例
本帖最后由 爱随缘2013 于 2021-12-30 11:54 编辑
可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考资料太少,搞得头大,执行效率比HAL库强多了
ADC波动很小±3;
爱随缘2013 发表于 2021-12-30 11:42
可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考 ...
额,解决了就好,其实无关库,最早用标准库时也是这些配置 我觉得还是别用LL库吧,毕竟LL库比较接近底层,不方便理解 使用连续模式好像也没啥问题吧 你可以仿真看看,是否进入到ADC数据采集部分 我觉得可以用HAL库,能好一些
页:
[1]
2