搜索
bottom↓
回复: 11

stm8s adc1遇到问题

[复制链接]

出0入4汤圆

发表于 2015-1-20 15:42:16 | 显示全部楼层 |阅读模式
采用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版

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-1-20 16:07:51 | 显示全部楼层
寄存器操作的路过,帮顶~

出0入0汤圆

发表于 2015-1-20 16:45:37 | 显示全部楼层
本帖最后由 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呢,这里别误导你了

出0入0汤圆

发表于 2015-1-20 17:01:14 | 显示全部楼层
进来学习下.

出0入4汤圆

 楼主| 发表于 2015-1-21 08:21:44 | 显示全部楼层
xjjiang 发表于 2015-1-20 16:45
最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/******************** ...

你只  ADC1_StartConversion(); 了一次吗?  

我看手册说要两次 ADON的

出0入0汤圆

发表于 2015-1-21 08:59:58 | 显示全部楼层
进来学习一下

出0入4汤圆

 楼主| 发表于 2015-1-21 10:22:02 | 显示全部楼层
xjjiang 发表于 2015-1-20 16:45
最近刚用过,贴上我的单次转换模式,IAR下面的,看对你是否有帮助
#include "App.h"
/******************** ...

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

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

出0入0汤圆

发表于 2015-1-21 10:37:32 | 显示全部楼层
huarana 发表于 2015-1-21 10:22
多谢,用你的 do while 的方法可以搞定了。

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

不客气的

出0入0汤圆

发表于 2015-1-22 13:54:09 来自手机 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2016-1-18 16:35:48 | 显示全部楼层
根据3楼的成功了,我改了下函数,可以选择任意通道,多谢3楼~


u16 Get_ADC_Value(ADC1_ConvMode_TypeDef ADC1_ConversionMode, ADC1_Channel_TypeDef ADC1_Channel, ADC1_Align_TypeDef ADC1_Align)

{
  FlagStatus ADCRdy = RESET;
u16 u16_adc1_value;
ADC1_StartConversion();
ADC1_ConversionConfig(ADC1_ConversionMode, ADC1_Channel, ADC1_Align);
  do
    {
        ADCRdy = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
    }
    while(ADCRdy == RESET); // SET or RESET
u16_adc1_value = ADC1_GetConversionValue();
return u16_adc1_value;
}

出0入0汤圆

发表于 2016-4-27 15:37:52 | 显示全部楼层
我用的是stm8s105 ,采用port7b,现象是操作寄存器,无反应。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-7-24 14:06:25 | 显示全部楼层
rogerllg 发表于 2016-1-18 16:35
根据3楼的成功了,我改了下函数,可以选择任意通道,多谢3楼~

Mark,很有帮助,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 01:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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