10900|1

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32f407的ADC采样值总是固定值 [复制链接]

新手求指导!我使用F407的ADC1对电位器采样,5K欧电位器两端分别连vcc3.3和GND,中间的连在PA0上,采集到的值只有0,1023,4095三个,电位器调到300欧以下的时候采样到的是1023偶尔会是0值,大于300欧采集到的值只有4095了,源程序没有使用DMA,用了systick做定时,每300毫秒开始一次转换,直接读取ADC寄存器的采样值,以下贴上源码,求帮助。
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_AF;
  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;
复制代码

求大神指点!


此帖出自stm32/stm8论坛

最新回复

f4的adc还没用过  详情 回复 发表于 2018-6-25 14:48
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
f4的adc还没用过
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表