OpenEdv-开源电子网

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

ADC采集数据失败,怎么解决?

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
发表于 2018-5-4 16:51:49 | 显示全部楼层 |阅读模式
1金钱
这是代码:
void AD_DWJ(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
   
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
   
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;       //PA4接了个电位计,用万用表能够测出电压1.22V左右
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
   
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    ADC_DeInit(ADC1);
   
    ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode=DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
    ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel=1;
    ADC_Init(ADC1, &ADC_InitStructure);
    ADC_Cmd(ADC1,ENABLE);
   
   
    ADC_ResetCalibration(ADC1);
    while(ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while(ADC_GetCalibrationStatus(ADC1));
   
}

u16 Get_Adc(u8 ch)
{
    ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5);
    ADC_SoftwareStartConvCmd(ADC1,ENABLE);
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
    return ADC_GetConversionValue(ADC1);
}

下面是主程序:
u16 x;
float v;

int main(void)
{
    SystemInit();
    uart_init(115200);
    delay_init();
    AD_DWJ();
   
   
    while(1)
    {
        x=Get_Adc(ADC_Channel_4);
        v=(float)x*3.3/4095;
        printf("x:%d  v:%f\r\n",x,v);
        delay_ms(200);
    }
}
我是想通过串口观察采集到的数据,没连stm32f103之前,串口显示:x:0   v:0.000000
编译下载到stm32f103复位之后,还是显示上面的:x:0   v:0.000000
也就是说根本没采集到数据吧,这是咋回事啊,本人刚开始学,完全是照着别人的代码写的
希望有大佬帮我解决下,谢谢!



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
 楼主| 发表于 2018-5-4 16:53:32 | 显示全部楼层
@正点原子  原子哥,帮忙看下,谢谢!
回复

使用道具 举报

7

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2017-12-11
在线时间
63 小时
发表于 2018-5-4 18:39:11 | 显示全部楼层
原子哥应该很忙,早上起来看论坛时会发现原子哥都是在夜里回复,stm32的ADC我还没看到,看你这么多while,会不会死在里面了,还有一些标志位的判断不知道对不对,你可以用蜂鸣器,串口,LED灯从头开始调试,看看死在哪里了。如果没死的话,那就直接打印AD返回的值,看看是否有值,若果还是没有值的话那就是AD配置的问题了吧。
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-5-25
在线时间
17 小时
发表于 2018-5-4 20:32:42 | 显示全部楼层
是不是通道选错了?你查看下
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2017-3-16
在线时间
17 小时
发表于 2018-5-4 21:18:08 | 显示全部楼层

是不是通道选错了?你查看下
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2017-3-16
在线时间
17 小时
发表于 2018-5-4 21:18:37 | 显示全部楼层

是不是通道选错了?你查看下
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
 楼主| 发表于 2018-5-5 13:09:10 | 显示全部楼层
xiaomafax 发表于 2018-5-4 20:32
是不是通道选错了?你查看下

应该没有
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
 楼主| 发表于 2018-5-5 13:09:22 | 显示全部楼层
zhaoxiyao5210 发表于 2018-5-4 21:18
是不是通道选错了?你查看下

应该没有
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
 楼主| 发表于 2018-5-5 13:11:35 | 显示全部楼层
轱辘t309065 发表于 2018-5-4 18:39
原子哥应该很忙,早上起来看论坛时会发现原子哥都是在夜里回复,stm32的ADC我还没看到,看你这么多while,会 ...

这都是例程上的代码,基本都是照搬别人的。另外,就是采集不到AD的值。
回复

使用道具 举报

12

主题

129

帖子

0

精华

高级会员

Rank: 4

积分
947
金钱
947
注册时间
2018-4-5
在线时间
71 小时
发表于 2018-5-5 14:48:19 | 显示全部楼层
可以尝试用debug上j-link调试一下,看看是不是哪里死掉了。顺便看看数据有没有变化。
保守秘密,守望共济,等价交换,尊重知识,探求真知。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2018-4-9
在线时间
4 小时
 楼主| 发表于 2018-5-5 16:34:32 | 显示全部楼层
TheHellc 发表于 2018-5-5 14:48
可以尝试用debug上j-link调试一下,看看是不是哪里死掉了。顺便看看数据有没有变化。

我这个应该是很简单的问题,只是因为我初学,完全不知道该怎么找问题,调试也不会用。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 20:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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