STM32 多路AD转换问题
我想用STM32检测8处电压值,但是看了相关资料不明白其中的原理,比如一个AD模块有16个通道,是不是就可以检测16处电压?检测后的返回值只有一个ADC_DR寄存器,分时...
我想用STM32检测8处电压值, 但是看了相关资料不明白其中的原理,
比如一个AD模块有16个通道, 是不是就可以检测16处电压?
检测后的返回值只有一个ADC_DR寄存器,分时去读取值?还是每个对应一个寄存器保存读取值?
想知道实现这个过程的原理,希望有高手帮帮忙!特别是怎么读取每个的值 展开
比如一个AD模块有16个通道, 是不是就可以检测16处电压?
检测后的返回值只有一个ADC_DR寄存器,分时去读取值?还是每个对应一个寄存器保存读取值?
想知道实现这个过程的原理,希望有高手帮帮忙!特别是怎么读取每个的值 展开
展开全部
可以检测16处电压。。但是。。但是……不能同时检测。。。
比如如果只是采用adc1的话,要一个一个按顺序来,用库写程序的话有一句
ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 1,ADC_SampleTime_1Cycles5);
里面那个1表示在这一次周期的采样顺序,采样3个点就是
ADC_RegularChannelConfig(ADC1,ADC_Channel_3, 1,ADC_SampleTime_1Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 2,ADC_SampleTime_1Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_5, 3,ADC_SampleTime_1Cycles5);
其中的那个1,2,3就是顺序
如果用adc1和adc2的话是可以同时采样的……
但是只用1个adc的话16处采样的返回值只写在对应的ADC_DR里面,需要分时读取;
同样,adc1和adc2是有各自不同的adc_dr;
读取,可以通过dma传出来读取。在dma的设置里有关于adc的……
或者在库函数里也有直接读取的。。
或者。。直接去读寄存器也可以……
比如如果只是采用adc1的话,要一个一个按顺序来,用库写程序的话有一句
ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 1,ADC_SampleTime_1Cycles5);
里面那个1表示在这一次周期的采样顺序,采样3个点就是
ADC_RegularChannelConfig(ADC1,ADC_Channel_3, 1,ADC_SampleTime_1Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2, 2,ADC_SampleTime_1Cycles5);
ADC_RegularChannelConfig(ADC1,ADC_Channel_5, 3,ADC_SampleTime_1Cycles5);
其中的那个1,2,3就是顺序
如果用adc1和adc2的话是可以同时采样的……
但是只用1个adc的话16处采样的返回值只写在对应的ADC_DR里面,需要分时读取;
同样,adc1和adc2是有各自不同的adc_dr;
读取,可以通过dma传出来读取。在dma的设置里有关于adc的……
或者在库函数里也有直接读取的。。
或者。。直接去读寄存器也可以……
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
这时候最好是用DMA方式。
准备一个16单元的数组,设置DMA的目的地址为这数组。配置ADC为单次扫描方式和DMA传送,当启动一次转换后,排序器中16个通道的数据就依次放在数组的16个单元中了。这时只要检查DMA传送是否完成来判断16个通道是否转换完毕。
像TMS320F2812、28335这样的ADC,16个输入通道就对应着16个ADC_DR,这样转换结束后给个通道的结果就放在对应的ADC_DR里。
准备一个16单元的数组,设置DMA的目的地址为这数组。配置ADC为单次扫描方式和DMA传送,当启动一次转换后,排序器中16个通道的数据就依次放在数组的16个单元中了。这时只要检查DMA传送是否完成来判断16个通道是否转换完毕。
像TMS320F2812、28335这样的ADC,16个输入通道就对应着16个ADC_DR,这样转换结束后给个通道的结果就放在对应的ADC_DR里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我猜想你没有理解模块 通道的关系。
模块,是一个物理的adc转换器,这样的转换器,stm32芯片上只有2(或3)个。
那怎么有16个通道呢?
通道是什么意思呢。通道就是stm32的一个gpio,按照道理,一个adc转换器只能接一个gpio,怎么接了16个呢。原来gpio和adc中间有一个开关,可以编程选择——打开还是关闭。在同一时间内,一个adc只能接一个通道,stm32可以转换完成一个,再转换另外一个。一个adc模块,只有一个adc_dr。adc转换的结果就存放在adc_dr中,你应该转换完一个通道立即去读取去。
如果还有什么问题,随时等候。
模块,是一个物理的adc转换器,这样的转换器,stm32芯片上只有2(或3)个。
那怎么有16个通道呢?
通道是什么意思呢。通道就是stm32的一个gpio,按照道理,一个adc转换器只能接一个gpio,怎么接了16个呢。原来gpio和adc中间有一个开关,可以编程选择——打开还是关闭。在同一时间内,一个adc只能接一个通道,stm32可以转换完成一个,再转换另外一个。一个adc模块,只有一个adc_dr。adc转换的结果就存放在adc_dr中,你应该转换完一个通道立即去读取去。
如果还有什么问题,随时等候。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用扫描模式,按照你所定义的顺序依次采完16个通道,如果是定时1和3的话可以用DMA读取,定时器2就只能用软件查询了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询