打印
[STM32L0]

STM32CubeL0库中DMA模式ADC的一个疑问

[复制链接]
2452|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
L0库通过HAL_ADC_Start_DMA()函数启动DMA模式的ADC。问题就出在该函数的最后一个参数Length上——它到底对应的是以字节计算的数据量,还是传输次数。如果ADC的精度是12位,以字节计算的数据量将是传输次数的两倍。
下面是该库函数的说明和定义。

说明中清晰地指出,最后一个参数是以字节为单位的,而不是以ADC传输次数为单位的。该Length长度参数辗转对应的是DMA_CNDTRx寄存器。
然而STM32L0x1参考手册(Rev 6)的描述中却说到,DMA_CNDTRx对应的是传输的次数,也就是说ADC传输的数据量应该是Length×2字节

但是,在同一个参考手册的DMA_CNDTRx寄存器说明中又出现了大逆转,说里面的数据是以字节为单位

我开始迷糊了,这到底以什么为单位? @香水城

沙发
mmuuss586| | 2017-9-17 09:32 | 只看该作者
bytes是多字节;


使用特权

评论回复
板凳
feelhyq| | 2017-9-17 13:40 | 只看该作者
ADC 和DMA 没有必然的联系

使用特权

评论回复
地板
feelhyq| | 2017-9-17 13:41 | 只看该作者
这个应该是指传输的次数

使用特权

评论回复
5
yiyigirl2014| | 2017-9-17 21:49 | 只看该作者
一次是1个字节?

使用特权

评论回复
6
碧云天书|  楼主 | 2017-9-18 02:56 | 只看该作者

bytes是多字节的意思。按文中的意思,寄存器里的数值应该是剩余的字节数。
可是我用STM32L011开发板测过了,DMA_CNDTRx寄存器实际存的是ADC传输次数。
也就是说,前面贴出的CubeL0库的注释说明也是错误的。HAL_ADC_Start_DMA()函数的最后一个参数不是以字节计的数据长度,而是传输次数。

使用特权

评论回复
7
mmuuss586| | 2017-9-18 10:01 | 只看该作者
碧云天书 发表于 2017-9-18 02:56
bytes是多字节的意思。按文中的意思,寄存器里的数值应该是剩余的字节数。
可是我用STM32L011开发板测过 ...

采样次数(也就是你说的传输次数),如果是32位的数据,采样16个数据,就要占16*4,64个字节了;

使用特权

评论回复
8
碧云天书|  楼主 | 2017-9-18 19:50 | 只看该作者
mmuuss586 发表于 2017-9-18 10:01
采样次数(也就是你说的传输次数),如果是32位的数据,采样16个数据,就要占16*4,64个字节了; ...

谢谢版主的回复,我最后确认一下,在你说的这种情况下,HAL_ADC_Start_DMA()函数的Length参数应该填16(次),而不是64(字节),对吧?

使用特权

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

本版积分规则

个人签名:红尘俗世偏逍遥 看风乍起 笑雨正飘

24

主题

330

帖子

23

粉丝