[STM32F0] 定时器触发ADC,DMA搬运,只能搬运一次

[复制链接]
4797|26
 楼主| 爱随缘2013 发表于 2021-12-29 18:52 | 显示全部楼层 |阅读模式
AD, AC, dc, DM, CD
想实现定时器1在PWM模式下,在上升沿触发ADC,然后通过DMA搬运,我把ADC连续转换模式打开,然后都是正常。如果使用定时器触发应该不能使用连续模式,我把连续模式关闭后,ADC仿真只有一次转换,然后就不能转换了,大家帮忙看下怎么回事,LL库刚使用,还有很多不懂,感谢大家了。使用的是LL库

005521zk5jd444cklazjzh.png 005522d18513n88y022y0d.png 005523fu2vmakcka8c25jp.png 005523jknynjk66zskwxud.png


chenjinyu 发表于 2021-12-29 20:27 | 显示全部楼层
你要把连续模式打开,每次定时器的timepu触发DMA,进行1次ADC
 楼主| 爱随缘2013 发表于 2021-12-29 20:59 | 显示全部楼层
chenjinyu 发表于 2021-12-29 20:27
你要把连续模式打开,每次定时器的timepu触发DMA,进行1次ADC

不对吧,我看别人写的是禁止连续模式转换,这样的话只有第一次是ADC触发的,后面都不是了,我测试也是发现这个问题,ADC波动很大,之前我们再定时器中断转换ADC,波动很小
xch 发表于 2021-12-29 22:52 | 显示全部楼层
没看到你设置触发源。现有的一次触发是软件触发的
 楼主| 爱随缘2013 发表于 2021-12-29 22:56 | 显示全部楼层
xch 发表于 2021-12-29 22:52
没看到你设置触发源。现有的一次触发是软件触发的

设置了,定时器1触发的
xch 发表于 2021-12-29 22:59 | 显示全部楼层
CFGR  寄存器要配置一下.........
xch 发表于 2021-12-29 23:29 | 显示全部楼层
 楼主| 爱随缘2013 发表于 2021-12-29 23:38 | 显示全部楼层

已经设置了,我看例程打开DMA中断,我试了一下还是不行
l4157 发表于 2021-12-30 08:58 | 显示全部楼层
我在用STM32F373的SDADC的时候也碰到类似的问题,貌似每次转换后HAL有个状态要重置才能执行下次操作,估计是为了保护ADC结果不修改
xch 发表于 2021-12-30 10:03 | 显示全部楼层
爱随缘2013 发表于 2021-12-29 23:38
已经设置了,我看例程打开DMA中断,我试了一下还是不行

先用软件触发,看看DMA 是不是工作。
5082561cd12a0263f6.png
这句去掉是不是一次触发都没了?

CFGR 寄存器设置 要确认一下修改成功没。这个寄存器不是随便可以修改的。  

从你贴的文字可以看出你啥都没做就上网提问了。我们不是兽医,也需要一些互动数据。

 楼主| 爱随缘2013 发表于 2021-12-30 10:24 | 显示全部楼层
xch 发表于 2021-12-30 10:03
先用软件触发,看看DMA 是不是工作。

这句去掉是不是一次触发都没了?

对的,去掉就没有触发了,我再看下CFGR寄存器
xch 发表于 2021-12-30 10:57 | 显示全部楼层
爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器

看你的程序流程对ADC设置后进行了一次校准,应该是校准破坏了设置。

建议先校准,然后保存校准值。然后设置ADC,然后恢复校准值...
xch 发表于 2021-12-30 11:01 | 显示全部楼层
爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器

然后,去掉那个多余的软件触发。

应当改成启动定时器。它的触发输出就能启动ADC。

完成DMA “搬运”后,在DMA完成中断服务之中关闭定时器、ADC、DMA。
香水城 发表于 2021-12-30 11:20 | 显示全部楼层
本帖最后由 香水城 于 2021-12-30 13:00 编辑

按理是定时器触发一次做一轮ADC转换,所以不要开启ADC的连续模式。
注意DMA配置那块有无问题。
这篇基于HAL库的供参考:
定时器触发STM32 ADC的采样转换示例
 楼主| 爱随缘2013 发表于 2021-12-30 11:42 | 显示全部楼层
本帖最后由 爱随缘2013 于 2021-12-30 11:54 编辑

可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考资料太少,搞得头大,执行效率比HAL库强多了
ADC波动很小±3;
liaojihua2010 发表于 2021-12-30 12:47 | 显示全部楼层
爱随缘2013 发表于 2021-12-30 11:42
可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考 ...

额,解决了就好,其实无关库,最早用标准库时也是这些配置
zyj213 发表于 2021-12-31 13:23 | 显示全部楼层
我觉得还是别用LL库吧,毕竟LL库比较接近底层,不方便理解
shjuturt 发表于 2021-12-31 13:24 | 显示全部楼层
使用连续模式好像也没啥问题吧
ksjdisa 发表于 2021-12-31 13:25 | 显示全部楼层
你可以仿真看看,是否进入到ADC数据采集部分
ppaakala 发表于 2021-12-31 13:26 | 显示全部楼层
我觉得可以用HAL库,能好一些
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部