OpenEdv-开源电子网

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

STM8L的ADC采集问题

[复制链接]

5

主题

103

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2014-11-26
在线时间
25 小时
发表于 2016-12-16 19:34:08 | 显示全部楼层 |阅读模式
本帖最后由 1376115749 于 2016-12-16 19:35 编辑

我初始化stm8L的ADC后,每次连续采集的时候第一次值是正确的,但是后面采集的值就变的没了谱,求大神指点

[mw_shl_code=c,true]void ADC1_Init(void)
{
    GPIO_Init(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6,GPIO_Mode_In_FL_No_IT);
    CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,ENABLE);//开启ADC外设时钟

    ADC_DeInit(ADC1);
    ADC_Init(ADC1, ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);
    ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_16Cycles);
   
        ADC_SchmittTriggerConfig(ADC1,ADC_Channel_0,DISABLE);
        ADC_SchmittTriggerConfig(ADC1,ADC_Channel_1,DISABLE);
    ADC_SchmittTriggerConfig(ADC1,ADC_Channel_2,DISABLE);

    ADC_DMACmd(ADC1, DISABLE);

    ADC_VrefintCmd(ENABLE);

    //ADC_Cmd(ADC1,ENABLE);
}

//有三个通道可以采集数据
ADC_Channel_TypeDef ChannelMap[]={ADC_Channel_0,ADC_Channel_1,ADC_Channel_2};
uint16_t ADC1_ReadChannel(uint8_t ADC_Channel)
{
    uint16_t TimeOutValue=50;
    uint16_t ADCValue=0;

    ADC_Cmd(ADC1,ENABLE);
    ADC_ChannelCmd(ADC1, ChannelMap[ADC_Channel], ENABLE);
    ADC_SoftwareStartConv(ADC1);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET && TimeOutValue-- != 0);
    ADCValue = ADC_GetConversionValue(ADC1);
    ADC_ChannelCmd(ADC1, ChannelMap[ADC_Channel], DISABLE);
    ADC_Cmd(ADC1,DISABLE);

    return ADCValue;
}[/mw_shl_code]
下图为调试后的截图:


QQ截图20161216193132.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-28 22:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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