你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求STM8L151单片机的AD转换

[复制链接]
意法半导体社区 提问时间:2015-11-12 14:13 /
我使用STM8L151单片机,使用三个AD通道0、1、2三个,单次转换,0通道检测电池电压,目前单步运行是发现第一次结果正确,接下来的结果接错误了,使用16M晶振,程序如下:
GPIO_Init(BATTER_PORT, BATTER_PIN, GPIO_Mode_In_FL_No_IT);//电池检测管脚初始化
GPIO_Init(TEL_AD_PORT, TEL_AD_PINS, GPIO_Mode_In_FL_No_IT);


void AD1_Init(void)//AD初始化
{
        CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,ENABLE);
        ADC_SchmittTriggerConfig(ADC1,BAT_AD_CHANNEL, DISABLE);
        ADC_SchmittTriggerConfig(ADC1,TEL_AD_CHANNEL1, DISABLE);
        ADC_SchmittTriggerConfig(ADC1,TEL_AD_CHANNEL2, DISABLE);
          ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_10Bit,ADC_Prescaler_1);
          ADC_SamplingTimeConfig(ADC1,ADC_Group_SlowChannels,ADC_SamplingTime_384Cycles);
          ADC_Cmd(ADC1,ENABLE);
          ADC_DMACmd(ADC1,DISABLE);
          ADC_ChannelCmd(ADC1,BAT_AD_CHANNEL,ENABLE);
          ADC_SoftwareStartConv( ADC1);
}



void AD_Function(void)//AD程序
{
    u16 Temp1,Temp2;

        if(ADC1->SR & ADC_FLAG_EOC){        
                Temp1 = ADC1->DRL;
                Temp2 = ADC1->DRH;
                Temp2 = (Temp2 << 8) | Temp1;        
                ADBuf[ADChannel] = Temp2;
                switch(ADChannel){
                        case uaBAT://电池电压检测
                                if(ADBuf[uaBAT] < 341){                //1024*(1.1/3.3)
                                        if(ADBuf[uaBAT]<311)        //1024*(1/3.3)
                                        {Flag_off=TRUE;}
                                        Change_WriteData(0x12,0x40,5);
                                }
                                else
                                {Change_WriteData(0x12,0x40,6);}
                        break;
                        case uaTEL1:
                                if(ADBuf[uaTEL1] > 931)                                                                                                                        //1024*(3/3.3)
                                {ErrIn();}
                        break;
                        case uaTEL2:
                                if(ADBuf[uaTEL2] > 931)                                                                                                                        //1024*(3/3.3)
                                {ErrIn();}
                        break;
                        default:break;
                }
                ADChannel++;
                if(ADChannel == uaMax){
                        ADChannel = uaBAT;
                }
                ADC1->SR &= (~ADC_FLAG_EOC);
                ADC1->SQR[3] &= (~ADC_SQR4_CHSELS);
                ADC1->SQR[3] |= ADChannel;        /*使能通道*/
                ADC1->CR1 |= ADC_CR1_START;
        }
}


typedef enum {
        uaBAT = 0,//电池电压
        uaTEL1,
        uaTEL2,
        uaMax
}T_AD_CHANNEL;

求大神给个解释。。。。。。

收藏 评论2 发布时间:2015-11-12 14:13

举报

2个回答
逍遥李 回答时间:2015-11-12 14:59:55
错误什么现象?你怎么知道出错了?你怎么排查的?你的猜测是哪里出错了?
我手里没有这款,只有8S105,我想大家都不一定刚好有你的芯片,你最好把问题描述清楚一些,
意法半导体社区 回答时间:2015-11-12 15:55:48
逍遥李 发表于 2015-11-12 14:59
错误什么现象?你怎么知道出错了?你怎么排查的?你的猜测是哪里出错了?
我手里没有这款,只有8S105,我想 ...

谢谢你 我刚刚解决了,是我的通道选错了
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版