STM32F103 ADC模拟量采集程序开发

ADC模块测试

  1. 功能描述

12位ADC是一种逐次逼近型模拟数字转换器。它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单此,连续,扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。

模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。

  1. 主要特性
  1. 12-位分辨率
  2. 转换结束,注入转换结束和发生模拟看门狗事件时产生中断
  3. 单次和连续转换模式
  4. 从通道0到通道n自动扫描模式
  5. 自校准
  6. 带内嵌数据 一致的数据对齐
  7. 通道之间采样间隔可编程
  8. 规则转换和注入转换均有外部触发选项
  9. 间断模式
  10. 双重模式(带2个ADC的器件)
  11. ADC转换速率1MHZ
  12. ADC供电要求:2.4V到3.6V
  13. ADC输入范围:Vref-<=   Vin  <= Vref+
  14. 规则通道转换期间有DMA请求产生。
  15. 如果有VREF--管脚(取决于封转),必须和VSSA相连接

3、硬件电路

STM32F103 ADC模拟量采集程序开发_第1张图片

 

  1. 软件代码

#include"stm32f10x_lib.h"

/***********************************************************

* 函数名称:void ADC_Configuration(void)

* 功能描述:ADC模数转换

* 入口参数:无

* 出口参数:无

***********************************************************/

void ADC_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

ADC_InitTypeDef ADC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);   //开启ADC1的时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  //PC5

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_Init(GPIOC,&GPIO_InitStructure);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;  //独立模式

ADC_InitStructure.ADC_ScanConvMode = ENABLE;  //连续多通道模式

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换模式

ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//不受外界决定

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据右对齐

ADC_InitStructure.ADC_NbrOfChannel = 1;  //扫描通道数1

ADC_Init(ADC1,&ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 1, ADC_SampleTime_55Cycles5);//ADC1,

ADC_Cmd(ADC1,ENABLE);

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

}

/***********************************************************

* 函数名称:u16 Test_ConversionResult(void)

* 功能描述:测试ADC转换的结果,通过数码管显示ADC采样的值

* 入口参数:无

* 出口参数: conresult

ADC转换的结果

***********************************************************/

u16 Test_ConversionResult(void)

{

u16 conresult=0;

if(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==SET)

{

conresult = ADC_GetConversionValue(ADC1);

conresult = conresult * 3300;

conresult = conresult / 4096;

}

ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);

return(conresult);

}

你可能感兴趣的:(物联网项目实战之单片机接口开发,stm32,单片机,arm)