打印
[STM32F1]

STM32 adc 多通道单次采集

[复制链接]
1653|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
IICeeprom|  楼主 | 2017-11-21 12:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在使用stm32ADC的时候,是用的多通道连续采集,DMA传输,但是现在我想不使用DMA,在我想读数据的时候才去读ADC的数据,单通道我明白,多通道的怎么去选择通道呢?
沙发
IICeeprom|  楼主 | 2017-11-21 13:04 | 只看该作者
u16 GetVolt()
{
  for(i = 0; i<100; i++)
  {
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
    advalue +=(u16)ADC_GetConversionValue(ADC1);
  }
  advalue = advalue >>4;
  advalue = advalue *3288/4096;
}
这是单次采集的程序,但是我不知道它到底采集的是哪个通道,
如果我想获取两个不同的通道,该怎么去写呢?
手打的代码,迁就着看吧

使用特权

评论回复
板凳
mmuuss586| | 2017-11-21 14:02 | 只看该作者
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   
{
          //设置指定ADC的规则组通道,一个序列,采样时间
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采样时间为239.5周期                                      
  
        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的软件转换启动功能       
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束

        return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1规则组的转换结果
}

使用特权

评论回复
地板
zhuotuzi| | 2017-11-21 15:12 | 只看该作者
调用楼上版主的子函数就行了。

使用特权

评论回复
5
IICeeprom|  楼主 | 2017-11-21 20:20 | 只看该作者
mmuuss586 发表于 2017-11-21 14:02
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)   

这个好像是正点原子的,今天看到了,写的也很有道理,谢了

使用特权

评论回复
6
mmuuss586| | 2017-11-21 20:34 | 只看该作者
IICeeprom 发表于 2017-11-21 20:20
这个好像是正点原子的,今天看到了,写的也很有道理,谢了

是的,就是原子哥的;

使用特权

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

本版积分规则

5

主题

92

帖子

0

粉丝