关于STM32 ADC时采用DMA的一点疑问
2024-10-25 来源:cnblogs
手册上有这样的话:只有ADC1能够产生DMA请求,似乎是只有ADC通道1能采用DMA方式传输数据。
但是万利的开发板上的ADC例子,用的是ADC通道10,还用了DMA 方式传数据。
所以我猜测 “只有ADC1能够产生DMA请求”中提到的ADC1 并不是指ADC 通道1,
而是软件可配置的 ADC 通道的分类形式,可分为ADC1和ADC2.
我们可将 通道10(或其他)配置成ADC1 “模式”。通过函数
/* ADC1 regular channel10 configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_55Cycles5);
实现
来自芯片手册:
注:
– ADC1的模拟输入通道16和通道17在芯片内部分别连到了温度传感器和VREFINT。
– ADC2的模拟输入通道16和通道17在芯片内部连到了VSS。
来自网友评论:
stm32的ADC2 问题
stm32的ADC2是 不是可以用DMA方式,怎么用???我看手册里只有ADC1有DMA功能,如果ADC1和ADC2同时规则采集16个通道,DMA怎么用呢????
是的,只有ADC1有DMACEDN论坛3 r1 C' j$ N6 y$ l% c
但是你的16个通道都可以使用ADC1处理,那也不是16个通道都能用DMA方式了吗
原来如此啊:
来自STM32F103 的另一份手册:
ADC(模拟/数字转换器)
STM32F103xx增强型产品内嵌2个12位的模拟/数字转换器(ADC),每个ADC有多达16个外部通道,可以实现单次或扫描转换。在扫描模式下,转换在选定的一组模拟输入上自动进行。
ADC接口上额外的逻辑功能允许:
●
同时采样和保持
●
交叉采样和保持
●
单次采样
ADC可以使用DMA操作。
模拟看门狗功能允许非常精准地监视一路、多路或所有选中的通道,当被监视的信号超出预置的阀值时,将产生中断。
由标准定时器(TIMx)和高级控制定时器(TIM1)产生的事件,可以分别内部级联到ADC的开始触发、外部触发和DMA触发,以使应用程序能同步AD转换和时钟。
关于它的双ADC 模式
16.10 双ADC模式
在有2 个ADC的器件中,可以使用双ADC模式(见图148双ADC框图)。
在双ADC 模式里,根据ADC1_CR1 寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1 主和ADC2 从的交替触发或同时触发。
注意: 在双ADC模式里,当转换配置成由外部事件触发时,用户必须将其设置成仅触发主ADC,从ADC设置成软件触发,这样可以防止意外的触发从转换。但是,主和从ADC的外部触发必须同时被激活。
下一篇:STM32中断使用笔记