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

新人求助!stm32f407的ADC采样值总是固定值

[复制链接]
sdgnxfrdhsh 提问时间:2018-6-27 17:17 /


新手求指导!我使用F407的ADC1对电位器采样,5K欧电位器两端分别连vcc3.3和GND,中间的连在PA0上,采集到的值只有0,1023,4095三个,电位器调到300欧以下的时候采样到的是1023偶尔会是0值,大于300欧采集到的值只有4095了,源程序没有使用DMA,用了systick做定时,每300毫秒开始一次转换,直接读取ADC寄存器的采样值,以下贴上源码,求帮助。PA0也没做任何复用。
MCU频率设置成168MHZ,首先
  1. RCC_HCLKConfig(RCC_HCLK_Div1);
  2. RCC_PCLK2Config(RCC_HCLK_Div2);
  3. RCC_PCLK1Config(RCC_HCLK_Div4);
  4. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
  5. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG | RCC_APB2Periph_ADC1, ENABLE);
复制代码
  1.         ADC_CommonInitTypeDef ADC_CommonInitStructure;
  2.         ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  3.   ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div8;
  4.   ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  5.   ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  6.   ADC_CommonInit(&ADC_CommonInitStructure);
复制代码
然后
  1. ADC_InitTypeDef ADC_InitStructure;

  2.         ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  3.   ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  4.   ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//单次采用转换不使用连续
  5.   ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  6.   ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
  7.   ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  8.   ADC_InitStructure.ADC_NbrOfConversion = 1;
  9.   ADC_Init(ADC1, &ADC_InitStructure);
  10.         ADC_Cmd(ADC1, ENABLE);
复制代码
接着
  1. GPIO_InitTypeDef GPIO_InitStructure;
  2. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  3. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  4.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
  5.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  6.   GPIO_Init(GPIOA, &GPIO_InitStructure);
复制代码
获取采样值
  1.         uint16_t value = 0;
  2.         ADC_RegularChannelConfig(ADC_DEVICE, ADC_Channel_0, 1, ADC_SampleTime_15Cycles);
  3.         
  4.         ADC_SoftwareStartConv(ADC1);
  5.         while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ) != SET);
  6.         value = ADC_GetConversionValue(ADC1);
  7.         ADC_ClearFlag(ADC1, ADC_FLAG_EOC );
  8.         return value;
复制代码
求大神指点错误!
收藏 评论11 发布时间:2018-6-27 17:17

举报

11个回答
wenyangzeng 回答时间:2018-6-27 21:41:34
本帖最后由 wenyangzeng 于 2018-6-27 21:42 编辑

这句好像错了,不知道编译有否提示错:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

应该是:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

sdgnxfrdhsh 回答时间:2018-6-28 16:54:32
wenyangzeng 发表于 2018-6-27 21:41
这句好像错了,不知道编译有否提示错:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

这个两个是一样的,标准库文件是 #define GPIO_Mode_AIN           GPIO_Mode_AN
sdgnxfrdhsh 回答时间:2018-6-30 11:22:17
难道就没一个人知道么
子曰好人 回答时间:2018-6-30 16:12:33
既然发现采样出来的值不对,就用万用表测量一下ADC引脚上的电压嘛,首先保证硬件上没有问题,再从软件上去找问题,问题总是会一个一个解决的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

sdgnxfrdhsh 回答时间:2018-7-3 09:17:00
子曰好人 发表于 2018-6-30 16:12
既然发现采样出来的值不对,就用万用表测量一下ADC引脚上的电压嘛,首先保证硬件上没有问题,再从软件上去 ...

搞硬件的新手不懂怎么量ADC引脚的电压,一支笔插电位器VCC点,另一只插电位器中点?
子曰好人 回答时间:2018-7-3 09:53:35
xcasdvdasvsaeva 发表于 2018-7-3 09:17
搞硬件的新手不懂怎么量ADC引脚的电压,一支笔插电位器VCC点,另一只插电位器中点? ...

可以测GND和电位器中点的电压;最好是测量GND和ADC对应引脚之间的电压。
sdgnxfrdhsh 回答时间:2018-7-6 16:27:49
子曰好人 发表于 2018-7-3 09:53
可以测GND和电位器中点的电压;最好是测量GND和ADC对应引脚之间的电压。

测量GND和ADC引脚电压没问题,扭动电位器,电压变化在0~3.3v内,同时调试发现0V时是1023,大于0V都是4095
幸福好嘞 回答时间:2018-7-7 13:32:42
你既然是新手的话,应该用的是开发板咯,用例程测试,如果例程没问题,那就专心找你的程序问题咯

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

sdgnxfrdhsh 回答时间:2018-7-7 14:07:28
幸福好嘞 发表于 2018-7-7 13:32
你既然是新手的话,应该用的是开发板咯,用例程测试,如果例程没问题,那就专心找你的程序问题咯 ...

照着ST标准库的例程和网上找到的例子写的,对比 几十遍了也找不到问题,调试一步一步状态査寄存器的值也都是对的
huangyanga 回答时间:2018-7-7 14:22:17
这句
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
改成
ADC_InitStructure.ADC_ExternalTrigConv =ADC_ExternalTrigConv_None;试试

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

子曰好人 回答时间:2018-7-10 09:29:20
xcasdvdasvsaeva 发表于 2018-7-6 16:27
测量GND和ADC引脚电压没问题,扭动电位器,电压变化在0~3.3v内,同时调试发现0V时是1023,大于0V都是4095 ...

再看看寄存器的值或者直接测量引脚电压吧

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版