stm8s adc1遇到问题

2019-12-27 18:36发布

采用stvd +库函数。

void        ADC1_INIT(void)
                                {
                                        ADC1_DeInit();
                                        GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);
                                        ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL0, DISABLE);
//                                        ADC1_ScanModeCmd(ENABLE);//启用扫描模式
//                                        ADC1_DataBufferCmd(ENABLE);//启用缓存寄存器存储数据
                                        ADC1_ITConfig(ADC1_IT_EOCIE, DISABLE);
                                        ADC1_Cmd(ENABLE);               
                                        ADC1_StartConversion();                                       
                                }
u16                ADC1_GET(void)
                                {
                                        FlagStatus flag_status;        //设定标志位  SET/RESET
                                        u16        ad_value=0;
                                        ADC1_StartConversion();                                       
                                        flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
//                                        flag_status = ADC1_GetFlagStatus(ADC1_FLAG_AWS4);
                                if (flag_status == SET) // SET or RESET
                                        {
//                                                flag_status=RESET;
//                                                ADC1_ClearFlag(ADC1_FLAG_EOC);
                                                ad_value=ADC1_GetConversionValue();
                                        }
                                        return ad_value;                                       
                                }

一直进不了if,查不到转换完成标志位置位,返回结果一直是00。注释掉判断标致位这段的话,能正常采集。

采用的是库函数2.1版
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
chxaitz
1楼-- · 2019-12-27 22:13
寄存器操作的路过,帮顶~
xjjiang
2楼-- · 2019-12-28 02:15
本帖最后由 xjjiang 于 2015-1-20 16:46 编辑

最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/*******************************************************************************
  * @函数名称        ADCInit
  * @函数说明   ADC初始化
  * @输入参数   无
  * @输出参数   无
  * @返回参数   无
*******************************************************************************/
void ADCInit(void)
{
    ADC1_DeInit();
    ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D6, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3, DISABLE);
    ADC1_Cmd(DISABLE);
}
/*******************************************************************************
  * @函数名称        ADCGet
  * @函数说明   ADC获取转换值
  * @输入参数   无
  * @输出参数   AD转换值
  * @返回参数   无
*******************************************************************************/
u16 ADCGet(void)
{
    FlagStatus ADCRdy = RESET;
    ADC1_StartConversion();
    do
    {
        ADCRdy = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
    }
    while(ADCRdy == RESET); // SET or RESET
    return (ADC1_GetConversionValue());
}

对了,我转换前才用ADC1_Cmd(ENABLE),我的产品要省电一点,ADC要400uA呢,这里别误导你了
horsema
3楼-- · 2019-12-28 07:29
 精彩回答 2  元偷偷看……
huarana
4楼-- · 2019-12-28 08:09
xjjiang 发表于 2015-1-20 16:45
最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/******************** ...

你只  ADC1_StartConversion(); 了一次吗?  

我看手册说要两次 ADON的
承诺媛梦
5楼-- · 2019-12-28 11:39
进来学习一下
huarana
6楼-- · 2019-12-28 16:08
xjjiang 发表于 2015-1-20 16:45
最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/******************** ...

多谢,用你的 do while 的方法可以搞定了。

看来库函数里的if 有问题还是我那个库函数中文参考有问题。

一周热门 更多>