OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10194|回复: 4

stm32f030的ADC单通道采样问题

[复制链接]

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2016-7-4 18:32:02 | 显示全部楼层 |阅读模式
20金钱
先讲下目的:
三个通道分别采集不同项目,同一时刻,可能工作一个通道、两个通道或者三个通道。
大牛看下程序:
配置部分:
void ADC_Configer(void)
{
    ADC_InitTypeDef  ADC_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
    ADC_StructInit(&ADC_InitStruct);
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
    //ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;                      //关闭连续转换模式
    ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;                      //关闭连续转换模式
    ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
    ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStruct.ADC_ScanDirection = ADC_ScanDirection_Upward;
    ADC_Init(ADC1,&ADC_InitStruct);

    ADC_GetCalibrationFactor(ADC1);                                          //ADC校准      
    //ADC_StopOfConversion(ADC1);
    ADC_Cmd(ADC1,ENABLE);
}

数据采集部分:
UINT16 getadcvalue(UINT32 ADC_Channel)
{
    UINT16 adcresult = 0;
    UINT16 idx;           
    UINT16 atomizevalue[ADCCONV_NUM];            //采样电流保存数组

    ADC_CHNL_NONE;                                //先把采样通道清0
    ADC_ChannelConfig(ADC1, ADC_Channel, ADC_SampleTime_1_5Cycles);    //单独配置需要采样的通道
   
    while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADRDY) == DISABLE);
    ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
    ADC_ClearFlag(ADC1, ADC_FLAG_OVR);
    ADC_StartOfConversion(ADC1);
    for(idx = 0;idx < ADCCONV_NUM;idx++)
    {
        while (!(ADC1->ISR & 0x04));
        atomizevalue[idx] = ADC1->DR;
    }
    ADC_StopOfConversion(ADC1);
    adcresult = buffer_avg((void *)atomizevalue);   
    return adcresult;
}
问题描述:
主程序中,实时监测温度变化,定时器中断定时采集另一个,调用的时候根据传入的通道不同采集不同通道数据,
调试中发现,通道数据会发生串位现象,比如温度的AD字很大,突然会出现一个很小的,是由于另一个通道的数据被当做温度采集走了!

有没有熟悉f030的朋友,帮忙看看,不胜感激!

最佳答案

查看完整内容[请看2#楼]

是不是在执行主程序中的AD采样时,被中断了,通道号被重新设置了?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
 楼主| 发表于 2016-7-4 18:32:03 | 显示全部楼层
是不是在执行主程序中的AD采样时,被中断了,通道号被重新设置了?
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
 楼主| 发表于 2016-7-4 20:16:16 | 显示全部楼层
没有路过的大神指点一下吗?
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-7-4 20:32:32 | 显示全部楼层
我直接用DMA接收的,好像没出现过这情况
回复

使用道具 举报

26

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2016-4-6
在线时间
102 小时
发表于 2017-10-13 09:28:17 | 显示全部楼层
你好 我想问一下 从adc通道16读出温度之后 对数据怎么计算处理的呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 15:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表