打印
[STM32F0]

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

[复制链接]
2203|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
爱随缘2013|  楼主 | 2021-12-29 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, AC, dc, DM, CD
想实现定时器1在PWM模式下,在上升沿触发ADC,然后通过DMA搬运,我把ADC连续转换模式打开,然后都是正常。如果使用定时器触发应该不能使用连续模式,我把连续模式关闭后,ADC仿真只有一次转换,然后就不能转换了,大家帮忙看下怎么回事,LL库刚使用,还有很多不懂,感谢大家了。使用的是LL库




使用特权

评论回复
沙发
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 | 只看该作者
没看到你设置触发源。现有的一次触发是软件触发的

使用特权

评论回复
5
爱随缘2013|  楼主 | 2021-12-29 22:56 | 只看该作者
xch 发表于 2021-12-29 22:52
没看到你设置触发源。现有的一次触发是软件触发的

设置了,定时器1触发的

使用特权

评论回复
6
xch| | 2021-12-29 22:59 | 只看该作者
CFGR  寄存器要配置一下.........

使用特权

评论回复
7
xch| | 2021-12-29 23:29 | 只看该作者
爱随缘2013 发表于 2021-12-29 22:56
设置了,定时器1触发的


使用特权

评论回复
8
爱随缘2013|  楼主 | 2021-12-29 23:38 | 只看该作者

已经设置了,我看例程打开DMA中断,我试了一下还是不行

使用特权

评论回复
9
l4157| | 2021-12-30 08:58 | 只看该作者
我在用STM32F373的SDADC的时候也碰到类似的问题,貌似每次转换后HAL有个状态要重置才能执行下次操作,估计是为了保护ADC结果不修改

使用特权

评论回复
10
xch| | 2021-12-30 10:03 | 只看该作者
爱随缘2013 发表于 2021-12-29 23:38
已经设置了,我看例程打开DMA中断,我试了一下还是不行

先用软件触发,看看DMA 是不是工作。

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

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

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

使用特权

评论回复
11
爱随缘2013|  楼主 | 2021-12-30 10:24 | 只看该作者
xch 发表于 2021-12-30 10:03
先用软件触发,看看DMA 是不是工作。

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

对的,去掉就没有触发了,我再看下CFGR寄存器

使用特权

评论回复
12
xch| | 2021-12-30 10:57 | 只看该作者
爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器

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

建议先校准,然后保存校准值。然后设置ADC,然后恢复校准值...

使用特权

评论回复
13
xch| | 2021-12-30 11:01 | 只看该作者
爱随缘2013 发表于 2021-12-30 10:24
对的,去掉就没有触发了,我再看下CFGR寄存器

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

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

完成DMA “搬运”后,在DMA完成中断服务之中关闭定时器、ADC、DMA。

使用特权

评论回复
14
香水城| | 2021-12-30 11:20 | 只看该作者
本帖最后由 香水城 于 2021-12-30 13:00 编辑

按理是定时器触发一次做一轮ADC转换,所以不要开启ADC的连续模式。
注意DMA配置那块有无问题。
这篇基于HAL库的供参考:
定时器触发STM32 ADC的采样转换示例

使用特权

评论回复
15
爱随缘2013|  楼主 | 2021-12-30 11:42 | 只看该作者
本帖最后由 爱随缘2013 于 2021-12-30 11:54 编辑

可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考资料太少,搞得头大,执行效率比HAL库强多了
ADC波动很小±3;

使用特权

评论回复
16
liaojihua2010| | 2021-12-30 12:47 | 只看该作者
爱随缘2013 发表于 2021-12-30 11:42
可以了,感谢各位大神哈,程序没有问题,我只开了ADC受定时器触发,在定时器里面也要设置一下。这LL库参考 ...

额,解决了就好,其实无关库,最早用标准库时也是这些配置

使用特权

评论回复
17
zyj213| | 2021-12-31 13:23 | 只看该作者
我觉得还是别用LL库吧,毕竟LL库比较接近底层,不方便理解

使用特权

评论回复
18
shjuturt| | 2021-12-31 13:24 | 只看该作者
使用连续模式好像也没啥问题吧

使用特权

评论回复
19
ksjdisa| | 2021-12-31 13:25 | 只看该作者
你可以仿真看看,是否进入到ADC数据采集部分

使用特权

评论回复
20
ppaakala| | 2021-12-31 13:26 | 只看该作者
我觉得可以用HAL库,能好一些

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

18

帖子

0

粉丝