STM32的ADC及内部温度传感器的使用

2012-03-27 16:24:37来源: 互联网

STM32自带1-3个ADC模块,采样精度达到了12位,比起当年使用的AVR单片机的10位来说,上了个小档次了~本测试程序采用了ADC DMA的中断方式,这样CPU就可以把ADC的任务交给DMA这个勤劳肯干的部下了,当DMA完成了一次任务之后会产生中断,告诉CPU可以来查收结果了!DMA也是在嵌入式系统中非常常用的,例如在LCD中,数据拷贝中等。。。在STM32F103RBT6中,ADC1和ADC2共用一组管脚

  总体编程思路和顺序如下:

  1.初始化RCC相关,使得系统有时钟,功能模块如ADC、DMA有时钟。

  2.GPIO相关初始化,比如常用的指示灯,ADC的管家要设置为输入等。

  3.NVIC向量中断的配置,因为这里使用了DMA中断和中断服务程序编写(下例中暂不使用)

  4.DMA配置(下例中暂不使用)

  5.ADC初始化

  以下是参考代码,使用ADC1的IN0脚

  void ADC_GPIO_Init()

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);

  GPIO_DeInit(GPIOA);

  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//设为模拟输入

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  }

  void ADC_configuration()

  {

  ADC_InitTypeDef ADC_InitStructure;

  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_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_7Cycles5);

  ADC_Cmd(ADC1,ENABLE);//使能或者失能指定的ADC

  ADC_ResetCalibration(ADC1);//重置指定的ADC的校准寄存器

  while(ADC_GetResetCalibrationStatus(ADC1));//等待校准寄存器初始化

  ADC_StartCalibration(ADC1);//开始校准

  while(ADC_GetCalibrationStatus(ADC1));//等待校准完成

  //ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC的软件转换启动功能

  }

  u16 GetADCValue(u8 ADC_Channel)//ADC_Channel_x 0~17

  {

  u16 adc_value;

  ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_7Cycles5);

  ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC的软件转换启动功能

  while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET);//检查制定ADC标志位置1与否 ADC_FLAG_EOC 转换结束标志位

  adc_value=ADC_GetConversionValue(ADC1);

  return adc_value;//返回最近一次ADCx规则组的转换结果

  }

  当使用内部温度传感器时,需要使能温度传感器通道

  ADC_TempSensorVrefintCmd(ENABLE);

  温度传感器通道号是ADC_Channel_16,此通道的采样时间调到最大,来保证精度;

  温度的计算公式如下:

    V25、Avg_Slope的典型值分别为1.43、4.3mV/C

  TEMP=(1.43-Vsense)/0.0043+25;

关键字:STM32  ADC  内部温度  传感器

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2012/0327/article_15472.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
STM32
ADC
内部温度
传感器

小广播

独家专题更多

迎接创新的黄金时代 无创想,不奇迹
迎接创新的黄金时代 无创想,不奇迹
​TE工程师帮助将不可能变成可能,通过技术突破,使世界更加清洁、安全和美好。
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved