ADC单通道连续采样并用串口发送电压值

发布者:代码律动最新更新时间:2015-09-22 来源: eefocus关键字:ADC  单通道  连续采样  串口发送 手机看文章 扫描二维码
随时随地手机看文章
#include "stm32f10x.h"
 
void Delay(unsigned int x);//延时
void GPIO_Configuration(void);//IO口配置
void UART_Init(void); //串口初始化
void UART2_PutChar(u8 ch);  //串口发送数据
void ADC_Configuration(void);  //ADC配置
void Read_ADC_Result(void);  //ADC读取结果
 
 
 
int main(void)
   SystemInit();
   unsigned int t;
   GPIO_Configuration();
   UART_Init();
   ADC_Configuration();
   while(1)
   {Read_ADC_Result();
    for(t=0;t<100;t++)
    {Delay(65530);}
   }
}
 
 
void GPIO_Configuration(void)
{
   GPIO_InitTypeDef GPIO_InitStructure; 
   RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2,ENABLE);
   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
   //GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE);
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;   
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOA, &GPIO_InitStructure);
}
 
void UART_Init(void)
{
   
   
    USART_InitTypeDef USART_InitStructure;
    USART_InitStructure.USART_BaudRate = 9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
 
    USART_Init(USART2, &USART_InitStructure); 
   // USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
   // USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
    USART_Cmd(USART2, ENABLE);
}
 
void UART2_PutChar(u8 ch)
{
   USART_SendData(USART2,ch);
   while(USART_GetFlagStatus(USART2,USART_FLAG_TXE) == RESET);
}
 
 
void ADC_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;   //定义结构体
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_ADC1,ENABLE);//IO口使能设置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   //ADC输入管脚PC0
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  
  
  ADC_InitTypeDef ADC_InitStructure;
  ADC_DeInit(ADC1);
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//工作在独立模式 
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;//工作在单通道模式
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//单次模式
  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_10,1,ADC_SampleTime_239Cycles5);//使用ADC1的通道10,采样顺序为1,采样周期为239.5周期
  ADC_Cmd(ADC1,ENABLE);//使能ADC1
  ADC_ResetCalibration(ADC1);//重置校准ADC1寄存器
  while(ADC_GetResetCalibrationStatus(ADC1));//获取ADC重置校准寄存器的状态 
  ADC_StartCalibration(ADC1);//开始ADC1的校准状态 
  while(ADC_GetCalibrationStatus(ADC1));//等待校准完成
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);//使能ADC1的软件转换启动功能
  
}
 
 
void Read_ADC_Result()
{
    unsigned char i,a,b,c,d;
    unsigned short result;
    
    for(i=0;i<8;i++)
    {
       ADC_SoftwareStartConvCmd(ADC1, ENABLE);//启动转换
       while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));//等待转换结束
       result += ADC_GetConversionValue(ADC1);
    }
    
    
    result = result >> 3;
    result = (unsigned int)(((unsigned long)result)*3300>>12);//转换为数字电压值
    a = result/1000;
    b = (result-a*1000)/100;
    c = (result-a*1000-b*100)/10;
    d = (result-a*1000-b*100-c*10);
    UART2_PutChar(0x56);//'v'
    UART2_PutChar(0X3D);//"="
    UART2_PutChar(a+48);
    UART2_PutChar(0x2e);//"."
    UART2_PutChar(b+48);
    UART2_PutChar(c+48);
    UART2_PutChar(d+48);
    UART2_PutChar(0x20);//"_"空格
}
 
 
 
 
void Delay(unsigned int x)
{
unsigned int t;
t=x;
while(t--);
}
关键字:ADC  单通道  连续采样  串口发送 引用地址:ADC单通道连续采样并用串口发送电压值

上一篇:STM32系统嘀嗒时基定时器应用
下一篇:串口2通信 USART2(发送数据)

推荐阅读最新更新时间:2024-03-16 14:32

16 位、210Msps ADC 可提供 80dB SNR
加利福尼亚州米尔皮塔斯 (MILPITAS, CA) – 2014 年 4 月 28 日 – 凌力尔特公司 (Linear Technology Corporation) 推出 16 位 210Msps 高性能高速模数转换器 (ADC) LTC2107,该器件适用于高端通信接收器和仪表应用。LTC2107 具备卓越的 AC 性能规格,实现了 80dB SNR 性能,这比其他产品高 4dB,该器件还在基带提供了业界领先的 98dB SFDR。LTC2107 的孔径抖动仅为 45fsRMS,从而能够以卓越的 SNR 性能实现频率高达 500MHz 的直接采样。 LTC2107 的独特功能可简化接收器设计,并改善系统性能。
[模拟电子]
16 位、210Msps <font color='red'>ADC</font> 可提供 80dB SNR
ADC10 测量单通道多次模式
volatile unsigned int ad_value ; int main( void ) { WDTCTL=WDTPW+WDTHOLD; //关看门狗 BCSCTL1 =CALBC1_1MHz; //设定DCO 为1MHZ DCOCTL =CALBC1_1MHZ; //时钟源选AD 内部时钟并4 分频,选通道10,AD 启动信号来源选TA.OUT1,选单通道连续采样 ADC10CTL1=ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2; //选1.5V 为正向参考,地为负参考,AD 中断使能,打开参考,启动AD 模块(不是启动AD 转换) ADC10CTL0=SREF_1+ADC10SHT_3+ADC1
[单片机]
stm32adc多通道数据采集
word文档链接: http://download.csdn.net/detail/mjlsuccess/6031351 ,免费的 工程连接: http://download.csdn.net/detail/mjlsuccess/6202155 /** @date 2013/8/28 @author Mei Jilin @brief ADC1的配置完成3通道的数据采集 @attention 1 ----------- adc_config(); //配置adc 2 ----------- adc_start(); //启动adc,开始转换 3 -----
[单片机]
德州仪器接收信号链演示套件简化超声波设计
高度集成的 8 通道演示套件加速产品上市进程 2006 年 8 月 4 日,北京讯 日前,德州仪器 (TI) 宣布推出一款方便易用的高性能超声波信号链演示套件,该套件可大幅缩短超声波设备的开发时间,从而加速产品上市进程,降低成本。该产品提供完整的 8 通道模拟接收信号链,通过高性能可变增益放大器与模数转换器 (ADC) 帮助用户处理探针输出的信号,从而在波束成型应用中实现快速原型设计。(更多详情,敬请访问: www.ti.com.cn/tus5000evm 。) TUS5000 评估板 (EVM) 可将 4 个双通道 VCA2615 可变增益放大器与 8 通道ADS5272 串行化 LVD
[新品]
单片机+ADC0832热电阻PT100测温程序
单片机源程序如下: #include reg51.h #include math.h #define uchar unsigned char #define uint unsigned int sbit cs=P1^2; sbit clk=P1^0; sbit di=P1^1; uchar num,num1,i,a,b,c,e,f,g; int wendu; sbit we = P2^7; //位定义数码管位选锁存器接口 sbit du = P2^6; //位定义数码管段选锁存器接口 sbit pay_plus=P1^4; sbit pay_minus=P1^3; sbit conf
[单片机]
单片机+<font color='red'>ADC</font>0832热电阻PT100测温程序
STM8L051之通过ADC1与DMA读取内部参考电压
stm8L051芯片内部的参考电压与电源电压有一定的关系 这在芯片供电电压变化的情况下,测量外部ADC电压输入提供一个确定的参考电压。这里提前厘清下:该内部参考电压VREFINT 并非ADC 的参考电压,ADC 的参考电压依然是VDD。即使VDD 有所波动,这个VREFINT 电压恒定不变,对于ADC 电路而言,它只是个测试点。 对于某固定的ADC 参考电压情况下,所有被测电压点的AD转换值与该点电压值保持同一比例关系,换句话说,对于ADC参考电压固定情况下,各点的电压与ADC值与成线性关系。下面图形是芯片分别在3个不同参考电压的示意图,这里参考电压接VDD。下面三根斜线分别是VDD 为2.8V、3.2V、3.6V 时的A
[单片机]
STM8L051之通过<font color='red'>ADC</font>1与DMA读取内部参考电压
如何为ADC转换器设计变压器耦合型前端
  前言   采用高输入频率(IF)的高速模拟-数字变换器(ADC)的系统,其设计一直被证明是一项具有挑战性的任务。而变压器的采用则使得这一任务变得更为困难,因为变压器存在固有的非线性,这些非线性特性会造成性能难以达到标准。本文就高速分级比较(sub-ranging)ADC采用变压器耦合前端设计时应该注意的问题进行了分类说明。   设计参数   在设计前端时有若干重要的参数需要予以考虑。   输入阻抗是设计的特性阻抗。在大多数情况下它的量值为50Ω,但是某些设计也会要求采用其他阻抗值。变压器本质上是跨阻抗器件,因为在有必要时,它们也可以实现特性阻抗不同的电路间的耦合,从而让总的系统负载得到充分的平衡。   带宽
[电源管理]
如何为<font color='red'>ADC</font>转换器设计变压器耦合型前端
STM32的ADC采样周期确定
一 STM32 ADC 采样 频率的确定 1. : 先看一些资料,确定一下ADC 的 时钟: (1),由 时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步。CLK 控制器为ADC 时钟提供一个专用的可编程预分频器。 (2) 一般情况下在程序 中将 PCLK2 时钟设为 与系统时钟 相同 RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); (3)在时钟配置寄存器(RCC_CFGR) 中
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved