ST意法半导体
直播中

lalajie

9年用户 1279经验值
擅长:模拟技术 存储技术
私信 关注
[问答]

STM32H743II ADC配置为双重模式遇到的疑问求解

芯片型号是STM32H743II。
按照RM0433 Rev8 990页中的描述,当ADC配置为双重模式(交替模式或者规则同步模式),DAMDF=0b11时,每产生一个DMA请求,就会以半字的形式传输表示两个ADC转换数据项的两个字节。
紧接着一段话又说当有4个新的8位值可用时,会发出新的DMA请求。并且给的示例中也是4个数据项产生一个DMA请求(在这里ADC_CDR寄存器)。
但是我在测试时发现,是两个字节就会产生DMA请求,也就是说ADC_CDR寄存器只有低16位有数据,高16位是没有数据的。
所以想请教一下大佬们,手册中的说法是否矛盾,我的测试现象是否正确?

回帖(2)

刘美隆

2025-3-11 15:03:45
根据我刚才的反复验证测试,跟你有同样的理解和质疑。这里的两句基本是矛盾的。


结合你、我的测试,初步认为,在DAMDF=0b11时,文档中提到的“when 4 new 8-bit values are available”应该是有问题的。


实际情况是每次DMA请求传输两个8位的ADC转换结果,而不是等待4个新的8位值,使用的是CDR寄存器的低半字。


而且这个结果也是可以理解的。
举报

elecfans

2025-3-12 17:43:34

在STM32H743II的ADC双重模式下,关于DMA请求和数据传输的描述确实可能会让人感到困惑。根据RM0433 Rev8的描述,我们一起来梳理一下这个问题。


1. 双重模式下的DMA请求和数据传输


在双重模式下,ADC可以配置为交替模式或规则同步模式。当DAMDF(DMA Mode for Dual ADC Mode)设置为0b11时,每产生一个DMA请求,会以半字(16位)的形式传输表示两个ADC转换数据项的两个字节。这意味着每次DMA请求会传输两个8位的ADC转换结果,分别来自两个ADC(ADC1和ADC2)。


2. 关于4个新的8位值产生DMA请求的描述


手册中提到,当有4个新的8位值可用时,会发出新的DMA请求。这里的“4个新的8位值”实际上指的是两个ADC各自的两个转换结果。也就是说,每个ADC会产生两个8位的转换结果,总共4个8位值,因此会触发一个DMA请求。


3. ADC_CDR寄存器的数据


在双重模式下,ADC_CDR寄存器用于存储两个ADC的转换结果。根据手册的描述,ADC_CDR寄存器的低16位存储ADC1的转换结果,高16位存储ADC2的转换结果。因此,每次DMA请求传输的16位数据实际上是ADC_CDR寄存器的低16位,即ADC1的转换结果。


4. 你的测试现象


你提到在测试时发现,是两个字节就会产生DMA请求,且ADC_CDR寄存器只有低16位有数据,高16位没有数据。这个现象与手册中的描述是一致的。每次DMA请求传输的是ADC_CDR寄存器的低16位,即ADC1的转换结果。高16位(ADC2的转换结果)在下一个DMA请求中传输。


5. 手册中的描述是否矛盾


手册中的描述并不矛盾,但可能需要更仔细地理解。当DAMDF=0b11时,每次DMA请求传输的是ADC_CDR寄存器的低16位(ADC1的转换结果),而高16位(ADC2的转换结果)会在下一个DMA请求中传输。因此,每两个字节(16位)产生一个DMA请求是正确的。


6. 总结


你的测试现象是正确的。在双重模式下,每次DMA请求传输的是ADC_CDR寄存器的低16位(ADC1的转换结果),高16位(ADC2的转换结果)会在下一个DMA请求中传输。手册中的描述是准确的,但需要理解每次DMA请求传输的是ADC_CDR寄存器的低16位。


希望这个解释能帮助你更好地理解STM32H743II ADC双重模式下的DMA请求和数据传输机制。如果还有其他问题,欢迎继续讨论!

举报

更多回帖

发帖
×
20
完善资料,
赚取积分