完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文主要讲解stm32f1中ADC和DMA的理解,不讲最基础的配置,需要对ADC和DMA有一定了解。另外在学习中参考了多篇文章,感谢前辈的付出。
在使用ADC过程中,我先是对ADC的校准过程产生了疑问 如上图最后两行可知,校准前ADC既要上电又要关电。。。我甚是不解,重看资料才理解 校准应该满足ADON第一次置1,且在置1之前,置0时间超过两个ADC周期,并且在读这段话时,我又重新对ADC的转换启动方式有了新的认识。 在看这个CR2寄存器ADON位之前,我一直以为ADC转换触发方式只有外部触发转换 和 软件设置CR2第22位SWSTART。但现在多了连续置ADON位为1这种方式,经过试验发现这种方式确实可行,于是我想在不开启连续转换模式下ADON在两次置1后会清0吗? 如上图所示,打开逻辑分析仪,读取CR2的ADON位可知,在ADON置1后不对其进行置0操作则一直保持1,即第一次读取完后对ADON置一下1,ADC就可以转换一次, 在了解完ADC的转换开启后,我又开始使用ADC的DMA请求 上图简单的一段话其暗藏了十分多的内容,我们逐一来看,第一句话直接表明了一个必须使用DMA的场景——在ADC开启多通道转换时,想要得到每个通道ADC转换的值,就必须开启对应的DMA通道,也就是说,当开启CR1的SCAN位时,我们所配置的ADC规则通道组将会按照我们所安排的顺序去开启转换,然后将值放入DR寄存器中,但是,问题就在这里。 如上图所示,ADC的数据位被存放在了DR寄存器的前16位,但这只有16位,多通道读取时,一次扫描将会有多个数据被存放,那当然会把之前的数据给顶替掉,所以DMA在这个时候起了大作用 如上图,DMA在得到ADC某个通道转换结束的信号时,就会将DR中的数据发送给外设寄存器或存储器(如SRAM),所以,我们可以设置一个数组,将多个数据存储下来。 但我那时产生了一个很傻的想法,那就是当第一个ADC通道转换完之后,DMA开始传输数据,那么第二个通道的转换是在DMA传输完成后开始还是边传输边转换 如上图所示,红线为SR的规则通道开始转换位,绿线为规则通道转换结束位,蓝色为DMA_ISR的传输完成中断位,由上图分析可知,红线拉高(ADC开始转换),绿线拉高(ADC转换完成),蓝线拉高(DMA传输完成),绿线拉低(ADC转换完成中断被清0),可见只有DMA传输完,ADC中断才被清零 (跟下图对应) ,进行下一个通道的转换。 那三句话是什么意思呢? 再读双ADC的快速交叉模式,配合着DR寄存器对高16位的讲解,一下就了然了。 第一次写博客,写的都不是啥重点,有错误的地方请各位指出,我看到会及时修改。 |
|
|
|
只有小组成员才能发言,加入小组>>
3070 浏览 9 评论
2766 浏览 16 评论
3281 浏览 1 评论
8621 浏览 16 评论
3870 浏览 18 评论
9478浏览 3评论
767浏览 3评论
389浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
386浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2118浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-7-22 01:49 , Processed in 0.974128 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号