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

[复制链接]
2739|7
 楼主| 碧云天书 发表于 2017-9-17 02:39 | 显示全部楼层 |阅读模式
L0库通过HAL_ADC_Start_DMA()函数启动DMA模式的ADC。问题就出在该函数的最后一个参数Length上——它到底对应的是以字节计算的数据量,还是传输次数。如果ADC的精度是12位,以字节计算的数据量将是传输次数的两倍。
下面是该库函数的说明和定义。
捕获2.JPG
说明中清晰地指出,最后一个参数是以字节为单位的,而不是以ADC传输次数为单位的。该Length长度参数辗转对应的是DMA_CNDTRx寄存器。
然而STM32L0x1参考手册(Rev 6)的描述中却说到,DMA_CNDTRx对应的是传输的次数,也就是说ADC传输的数据量应该是Length×2字节
无标题.jpg
但是,在同一个参考手册的DMA_CNDTRx寄存器说明中又出现了大逆转,说里面的数据是以字节为单位
无标题2.jpg
我开始迷糊了,这到底以什么为单位? @香水城

mmuuss586 发表于 2017-9-17 09:32 | 显示全部楼层
bytes是多字节;


feelhyq 发表于 2017-9-17 13:40 | 显示全部楼层
ADC 和DMA 没有必然的联系
feelhyq 发表于 2017-9-17 13:41 | 显示全部楼层
这个应该是指传输的次数
yiyigirl2014 发表于 2017-9-17 21:49 | 显示全部楼层
一次是1个字节?
 楼主| 碧云天书 发表于 2017-9-18 02:56 | 显示全部楼层

bytes是多字节的意思。按文中的意思,寄存器里的数值应该是剩余的字节数。
可是我用STM32L011开发板测过了,DMA_CNDTRx寄存器实际存的是ADC传输次数。
也就是说,前面贴出的CubeL0库的注释说明也是错误的。HAL_ADC_Start_DMA()函数的最后一个参数不是以字节计的数据长度,而是传输次数。
mmuuss586 发表于 2017-9-18 10:01 | 显示全部楼层
碧云天书 发表于 2017-9-18 02:56
bytes是多字节的意思。按文中的意思,寄存器里的数值应该是剩余的字节数。
可是我用STM32L011开发板测过 ...

采样次数(也就是你说的传输次数),如果是32位的数据,采样16个数据,就要占16*4,64个字节了;
 楼主| 碧云天书 发表于 2017-9-18 19:50 | 显示全部楼层
mmuuss586 发表于 2017-9-18 10:01
采样次数(也就是你说的传输次数),如果是32位的数据,采样16个数据,就要占16*4,64个字节了; ...

谢谢版主的回复,我最后确认一下,在你说的这种情况下,HAL_ADC_Start_DMA()函数的Length参数应该填16(次),而不是64(字节),对吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

26

主题

340

帖子

23

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