精华内容
下载资源
问答
  • MCU:STM32F103ZET6 功能:通过ADC采集数据 显示在LCD液晶屏上 并通过串口发送 说明:基于例程进行修改 到手可用
  • STM32(F103)的ADC读取电压程序
  • 基于STM32F103ADC内部单路电压采集C代码,采用中断方式,精度可达1mV以内,使用串口接收数据,采集的数据不断发往串口,打开串口调试助手接收和保存数据。
  • 咳咳,这一篇来玩一下STM32ADC(Analog to Digital Converter),也就是可以把输入的模拟量转换为数字量,这样就可以做个电压表了,再加上一些辅助电路,就能够自己做一个万用表了,非常完美。(嗯,这篇我们只做...
  • STM32F103RBT6 通过ADC通道(PA6)采集电压并通过串行端口发送采集到的数据出来
  • adc采集端口的电压,基础练习适合新手观看,各个文件单独分开易于移植
  • STM32CUEB关于KEIL5、stm32f103c8t6的ADC读取数据,电压测量程序 .
  • STM32F103_ADC电压采集

    千次阅读 2021-07-12 16:39:32
    ADC寄存器 1 、STM32 ADC 简介 STM32ADC 是 12 位逐次逼近型的模拟数字转换器。 它有 18 个通道,可测量 16 个...STM32F103 系列最少都拥有 2 个 ADC,我们选择的 STM32F103ZET 包含有 3 个 ADCSTM32ADC

    ADC寄存器
    在这里插入图片描述

    1 、STM32 ADC 简介

    STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。 它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的
    A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。
    模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
    STM32F103 系列最少都拥有 2 个 ADC,我们选择的 STM32F103ZET 包含有 3 个 ADC。STM32 的 ADC 最大的转换速率为 1Mhz,也就是转换时间为 1us(在 ADCCLK=14M,采样周期为 1.5 个 ADC 时钟下得到),不要让 ADC 的时钟超过 14M,否则将导致结果准确度下降。
    STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。

    简单来说STM32f103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断执行,ADC转换的结果可以左对齐或右对齐储存在16位数据寄存器中。ADC的输入时钟不得超过14MHz,其时钟频率由PCLK2分频产生(72MHZ)

    2 ADC功能框图讲解

    在这里插入图片描述在这里插入图片描述

    引脚说明
    在这里插入图片描述
    2.0.电压输入范围

    ADC所能测量的电压范围就是VREF- ≤ VIN ≤ VREF+,把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接3V3,得到ADC 的输入电压范围为: 0~3.3V。

    2.1、输入通道
    ADC的信号输入就是通过通道来实现的,信号通过通道输入到单片机中,单片机经过转换后,将模拟信号输出为数字信号。STM32中的ADC有着18个通道,其中外部的16个通道已经在框图中标出,如下:
    在这里插入图片描述

    这16个通道对应着不同的IO口
    在这里插入图片描述
    外部的16个通道在转换时又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路(注入通道貌似使用不多),下面简单介绍一下两种通道:
    规则通道
    规则通道顾名思义就是,最平常的通道、也是最常用的通道,平时的ADC转换都是用规则通道实现的。
    注入通道
    注入通道是相对于规则通道的,注入通道可以在规则通道转换时,强行插入转换,相当于一个“中断通道”吧。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执行完毕后,再回到之前规则通道进行转换。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结
    在这里插入图片描述

    注入通道转换顺序
    和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器来控制,控制关系如下:
    在这里插入图片描述

    在这里插入图片描述

    注:只有当JL=4的时候,注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。当JL<4时,注入通道的转换顺序恰恰相反,也就是执行顺序为:JSQ4、JSQ3、JSQ2、JSQ1。

    ·

    2.ADC开关控制即触发源

    通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断 电状态下唤醒。
    ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。
    通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(仅 几个μA)。

    ADC转换的输入、通道、转换顺序都已经说明了,但ADC转换是怎么触发的呢?就像通信协议一样,都要规定一个起始信号才能传输信息,ADC也需要一个触发信号来实行模/数转换。
    其一就是通过直接配置寄存器触发,通过配置控制寄存器CR2的ADON位,写1时开始转换,写0时停止转换。在程序运行过程中只要调用库函数,将CR2寄存器的ADON位置1就可以进行转换,比较好理解。
    另外,还可以通过内部定时器或者外部IO触发转换,也就是说可以利用内部时钟让ADC进行周期性的转换,也可以利用外部IO使ADC在需要时转换,具体的触发由控制寄存器CR2决定。
    ADC_CR2寄存器的详情如下:
    在这里插入图片描述

    3、 ADC时钟

    3.1、转换时间
    ADC的每一次信号转换都要时间,这个时间就是转换时间,转换时间由输入时钟和采样周期来决定。

    输入时钟 由于ADC在STM32中是挂载在APB2总线上的,所以ADC得时钟是由PCLK2(72MHz)经过分频得到的,分频因子由 RCC 时钟配置寄存器RCC_CFGR 的位 15:14 ADCPRE[1:0]设置,可以是 2/4/6/8
    分频,一般配置分频因子为8,即8分频得到ADC的输入时钟频率为9MHz。

    采样周期 采样周期是确立在输入时钟上的,配置采样周期可以确定使用多少个ADC时钟周期来对电压进行采样,采样的周期数可通过 ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置,ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。每个通道可以配置不同的采样周期,但最小的采样周期是1.5个周期,也就是说如果想最快时间采样就设置采样周期为1.5.

    转换时间 转换时间=采样时间+12.5个周期
    12.5个周期是固定的,一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us。

    由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器(STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
    在这里插入图片描述

    4.数据寄存器

    转换完成后的数据就存放在数据寄存器中,但数据的存放也分为规则通道转换数据和注入通道转换数据的。
    规则数据寄存器
    规则数据寄存器负责存放规则通道转换的数据,通过32位寄存器ADC_DR来存放。
    在这里插入图片描述
    注入数据寄存器
    注入通道转换的数据寄存器有4个,由于注入通道最多有4个,所以注入通道转换的数据都有固定的存放位置,不会跟规则寄存器那样产生数据覆盖的问题。 ADC_JDRx 是 32 位的,低 16 位有效,高 16 位保留,数据同样分为左对齐和右对齐,具体是以哪一种方式存放,由ADC_CR2 的 11 位 ALIGN 设置。
    在这里插入图片描述

    5、ADC看门狗

    在这里插入图片描述

    从框图中可以知道数据转换完成之后可以产生中断,有三种情况:
    规则通道转换完成中断
    规则通道数据转换完成之后,可以产生一个中断,可以在中断函数中读取规则数据寄存器的值。这也是单通道时读取数据的一种方法。
    注入通道转换完成中断
    注入通道数据转换完成之后,可以产生一个中断,并且也可以在中断中读取注入数据寄存器的值,达到读取数据的作用。
    模拟看门狗事件
    当输入的模拟量(电压)不再阈值范围内就会产生看门狗事件,就是用来监视输入的模拟量是否正常。

    以上中断的配置都由ADC_SR寄存器决定:
    在这里插入图片描述

    高阀值(ADC_HTR)
    在这里插入图片描述

    低阈值(ADC_LRT)
    在这里插入图片描述

    6、电压计算

    要知道,转换后的数据是一个12位的二进制数,我们需要把这个二进制数代表的模拟量(电压)用数字表示出来。比如测量的电压范围是0~3.3V,转换后的二进制数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以转换后的二进制数x代表的真实电压的计算方法就是:
    y=3.3* x / 4096

    7、 时序图

    如下图所示,ADC在开始精确转换前需要一个稳定时间tSTAB。在开始ADC转换和14个时钟周期后,EOC标志被设置,16位ADC数据寄存器包含转换的结果。
    在这里插入图片描述

    代码示例:

    注:代码使用规则通道,程序使用了ADC1的通道1,对应IO口为PA1。

    初始化IO口

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);
    	GPIO_InitTypeDef GPIO_InitStructure; 
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; 
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;   //设置为模拟输入
    	GPIO_Init(GPIOA, &GPIO_InitStructure); 
    

    ADC配置

    RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC时钟 一般不超过14MHZ 否则精度不准确  72MHZ/6=12MHZ
    	ADC_DeInit(ADC1);  //复位时钟
    	ADC_InitTypeDef ADC_InitStructure;
    	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC 工作模式:独立模式
    	ADC_InitStructure.ADC_ScanConvMode =  DISABLE; //AD 单通道模式;
    	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //AD 单次转换模式
    	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换由软件而不是外部触发启动
    	ADC_InitStructure.ADC_DataAlign =  ADC_DataAlign_Right; //ADC 数据右对齐;
    	ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的 ADC 通道的数目 1
    	ADC_Init(ADC1, &ADC_InitStructure); 
    	ADC_Cmd(ADC1,ENABLE);  //使能ADC1
    	ADC_ResetCalibration(ADC1);//重置指定的 ADC 的校准寄存器
    	ADC_StartCalibration(ADC1); //开始指定校准状态
    	while(ADC_GetResetCalibrationStatus(ADC1));   //等待复位校准结束
    	while(ADC_GetCalibrationStatus(ADC1));   //等待校 AD 准结束
    

    获取ADC 函数编写

    u16 Get_Adc(u8 ch)//获取ADC
    {	ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5); //设定ADC规则组	
    	ADC_SoftwareStartConvCmd(ADC1,ENABLE);  //使能软件启动
    	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束
    	return 	ADC_GetConversionValue(ADC1);  //返回最后一次规则装换结果
    }
    
    
    u16 Get_Adc_Average(u8 ch,u8 times)  //获取ADC平均值
    {
    u32 temp_val=0;
    u8 t;
    for(t=0;t<times;t++)
    { 
    temp_val+=Get_Adc(ch);
    Delay_ms(5);
    }
    return temp_val/times;
    } 
    

    mian函数,电压计算

    temp=(float)adcx*(3.3/4096);
    

    代码仓库:https://gitee.com/bigtiger_king/stm32f103_ADC/tree/master/

    展开全文
  • STM32f103 ADC 电压转换 采集电压

    千次阅读 2019-12-12 11:21:54
    首先明确一个概念,嵌入式或者说单片机里进行ADC(数模)转化,所采集的数据一般是电流或电压,但绝大多数我们采集的...STM32F103电压采集范围0~3.3V,最终是需要计算转化得到实际值。 电路电压经过ADC转换后为一个...
    1. 首先明确一个概念,嵌入式或者说单片机里进行ADC(数模)转化,所采集的数据一般是电流或电压,但绝大多数我们采集的只是电压值。
      其实电子电路的取样电路存在电流取样和电压取样,如果想要直接采集电流,需要在采集端串联电阻,然后采集电阻两端电压,而且电流传感器采样范围也就几十毫安,一般需要放大器。
    2. STM32F103电压采集范围0~3.3V,最终是需要计算转化得到实际值。
      电路电压经过ADC转换后为一个12Bit的数字,要想看到实际的采集电压值,需要这么计算:
      (1)ADC是12bit,采集范围0~3.3V,也就是2^12(4096)对应3.3
      (2)(2^12)/3.3=X/Y X为12bit转换后数值,Y为实际电压。
    展开全文
  • 通过串口调试助手设定电压值(十六进制),用ADC采集显示在串口助手上
  • STM32F103单片机采样ADC通道0---通道5共6个通道的正弦波数据,ADC采样后通过DMA存储,然后计算采样到正弦波每个周期的 最大值、最小值、平均值、有效值。并通过串口1打印。
  • 使用stm32f103 hal库版本,使用adc的 dma功能,配置相关通道,利用PA0、PA1、PA4引脚采集0—3.3V模拟电压
  • stm32f103c8t6采集多通道电压电压数值发送至串口助手
  • ADC模拟输入,电压转换,基础版 后面再传一个PT100 1ma恒流温度检测 正式产品用的 程序
  • 基于stm32f1系列多路ADC采集,使用DMA方式,滤波方式采用中值平均值方式
  • STM32F103 - ADC采集电压

    万次阅读 2018-01-05 10:57:35
    STM32F103 - ADC采集

            在使用STM32F103的ADC采集外部电压时,发现配置不同的采样周期ADC_SampleTime,外部输入阻抗的电压值不同,也就是影响了外部总电压分给ADC口的电压(电阻电压分配不对),但ADC能正常采集;

          所以要根据STM32F103手册中的ADC采样周期与外部输入阻抗的关系表来确定软件设定的采样周期Ts和采样电阻RAIN大小。关系表如下所示:



    展开全文
  • STM32F103实现双ADC同步采集电压信号

    万次阅读 多人点赞 2019-05-28 14:55:46
    STM32一般都拥有1~3个ADC,这些ADC可以独立使用,也可以使用双重/三重ADC采样模式,本文使用STM32F103ZET6的双重ADC模式,同步采集两个通道的电压信号。 一、注意事项 1、配置ADC的采样模式为同步规则采样 ADC1和...


    STM32一般都拥有1~3个ADC,这些ADC可以独立使用,也可以使用双重/三重ADC采样模式,本文使用STM32F103ZET6的双重ADC模式,同步采集两个通道的电压信号。

    一、注意事项

    1、配置ADC的采样模式为同步规则采样

    ADC1和ADC2采样模式相同,但其中ADC1为主ADC,ADC2为从ADC。
    该模式在ADC_CR1寄存器中配置:(具体资料请参详STM32参考手册)
    在这里插入图片描述

    2、使能DMA位

    在双ADC模式中,ADC1和ADC2的规则通道转换数据均会保存到主数据寄存器,也就是ADC1数据寄存器(ADC1_DR)中。为了能在主寄存器中读取从ADC的转换数据,必须使能DMA位。 无论是否使用DMA传输规则通道数据
    在ADC_CR2寄存器中配置:
    在这里插入图片描述

    3、触发方式配置

    如果ADC1使用软件触发,ADC2则使用外部通道触发;ADC1使用外部事件触发时,ADC2设置成软件触发,这样可以防止意外触发从转换。

    二、代码配置

    1、adc.c

     /****
     *   程序功能:实现双ADC同步采集,每路ADC各有1个通道(单通道)
     *
     ******/
     #include "adc.h"
     #include "delay.h"
     #include "usart.h"	
    
    #define M 128
    #define N 8
    uint16_t   value[N][M];
    u32 ADC_ConvertedValue;  
    
    
    //初始化ADC1
    void Adc1_Multi_Init(void)
    { 	
    	ADC_InitTypeDef ADC_InitStructure; 
    	GPIO_InitTypeDef GPIO_InitStructure;
     
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1	, ENABLE );	  //使能ADC1通道时钟
     
     
    	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
     
    	//PA1 作为模拟通道输入引脚
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
    	GPIO_Init(GPIOA, &GPIO_InitStructure);	
     
    	ADC_DeInit(ADC1);  //复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
     
    	ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;	//ADC工作模式:ADC1同步规则组模式
    	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数据右对齐
    	ADC_InitStructure.ADC_NbrOfChannel = 1;	   //顺序进行规则转换的ADC通道的数目
    	ADC_Init(ADC1, &ADC_InitStructure);	  //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
     
    	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5 );
     
    	 // 开启ADC的DMA支持
    	ADC_DMACmd(ADC1, ENABLE);  //使能ADC的DMA位
    	
    	/* Enable ADC1 */
    	ADC_Cmd(ADC1, ENABLE); //使能ADC1
    
    	/* Enable ADC1 reset calibaration register  使能ADC1复位校准寄存器 */   
    	ADC_ResetCalibration(ADC1);
    	/* Check the end of ADC1 reset calibration register   ADC1复位校准寄存器检查结束*/
    	while(ADC_GetResetCalibrationStatus(ADC1));
    
    	/* Start ADC1 calibaration    启动ADC1校准 */
    	ADC_StartCalibration(ADC1);
    	/* Check the end of ADC1 calibration  ADC1校准检查结束 */
    	while(ADC_GetCalibrationStatus(ADC1));
    		
    }	
    
    
    //初始化ADC2
    void Adc2_Multi_Init(void)
    { 	
    	ADC_InitTypeDef ADC_InitStructure; 
    	GPIO_InitTypeDef GPIO_InitStructure;
     
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC2	, ENABLE );	  //使能ADC2通道时钟
     
    	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
     
    	//PB0,1 作为模拟通道输入引脚
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;   
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚
    	GPIO_Init(GPIOC, &GPIO_InitStructure);	
     
    	ADC_DeInit(ADC2);  //复位ADC2,将外设 ADC2 的全部寄存器重设为缺省值
     
    	ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;	//ADC工作模式:ADC1同步规则组模式
    	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数据右对齐
    	ADC_InitStructure.ADC_NbrOfChannel = 1;	//顺序进行规则转换的ADC通道的数目
    	ADC_Init(ADC2, &ADC_InitStructure);	//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器   
     
    	ADC_RegularChannelConfig(ADC2, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5 );
    
    	ADC_ExternalTrigConvCmd(ADC2, ENABLE);   //使能ADC2的外部触发模式 
     
        /* Enable ADC2 */
    	ADC_Cmd(ADC2, ENABLE); //使能ADC2
    
    	/* Enable ADC1 reset calibaration register  使能ADC2复位校准寄存器 */   
    	ADC_ResetCalibration(ADC2);
    	/* Check the end of ADC1 reset calibration register   ADC2复位校准寄存器检查结束*/
    	while(ADC_GetResetCalibrationStatus(ADC2));
    
    	/* Start ADC1 calibaration    启动ADC2校准 */
    	ADC_StartCalibration(ADC2);
    	/* Check the end of ADC1 calibration  ADC2校准检查结束 */
    	while(ADC_GetCalibrationStatus(ADC2));
    	 
    }
    
    
    /*初始化ADC */
    void MY_ADC_Init(void)
    {
    	Adc1_Multi_Init();
    	Adc2_Multi_Init();
    	
    }
    
    
    void task_adc(void)
    {    
    	int i;
         printf("\r\n 采样开始\r\n");
    	 for(i=0;i<M;i++)
    		{
    			/* Start ADC1 Software Conversion  启动ADC1软件转换 */ 		
    			ADC_SoftwareStartConvCmd(ADC1, ENABLE);  //开始转换
    			
    			ADC_ConvertedValue=ADC1->DR;
    			
    			value[0][i] = (ADC_ConvertedValue&0xffff); //获取ADC的值
       		    value[1][i] = ((ADC_ConvertedValue>> 16)&0xffff);  //获取ADC的值
    			
    			printf("\r\n 编号%d  \t 编号%d  \t AD值: %d\r\n", 0,i,  value[0][i]);
    			printf("\r\n 编号%d  \t 编号%d  \t AD值: %d\r\n", 1,i,  value[1][i]); 
    					
    		}
    		 printf("\r\n 采样结束\r\n");
    }
    

    2、adc.h

    #ifndef __ADC_H
    #define __ADC_H	
    #include "sys.h"
    
    
    void Adc1_Multi_Init(void);
    void Adc2_Multi_Init(void);
    void MY_ADC_Init(void);
    void task_adc(void);
    
    #endif 
    

    3、main.c

    #include "led.h"
    #include "delay.h"
    #include "key.h"
    #include "sys.h"
    #include "usart.h"	 
    #include "adc.h"
     
    
     int main(void)
     {	 
        
    	delay_init();	    	 //延时函数初始化	  
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    	uart_init(115200);	 	//串口初始化为115200
     	LED_Init();			     //LED端口初始化			 	
     	MY_ADC_Init();		  		//ADC初始化
    	       
    	while(1)
    	{
    		task_adc();
    		LED0=!LED0;
    		delay_ms(250);	
    		
    	}
     }
    

    源码下载链接:https://download.csdn.net/download/shouwangyunkai666/11214477

    如有问题,欢迎随时交流!

    展开全文
  • STM32F103+ADC采集实时电压+LCD1602A显示

    千次阅读 多人点赞 2020-07-09 20:52:32
    STM32F103+ADC采集实时电压+LCD1602A显示前言代码 前言 刚开始学习STM32,用的是开发板是野火的指南者,这款板子网上资源很多。在学习ADC和LCD部分时,想利用手头仅有的LCD1602A进行显示电压,经过不断调试后,就有...
  • STM32F103做的一款PT100温度检测设备,通过ADC转换电压得到分度表中的温度。
  • 基于STM32F103C8T6最小系统板的双路ADC采样程序,可以同时采集两个模拟量的值
  • STM32F103VET6 拥有 1~3 个 ADC(每个ADC又具有多个通道),它的 ADC 是 12 位逐次逼近型的/模拟数字转换器。我此次使用的单片机型号是STM32F1O3VET6,它的ADC1/有 18 个通道,可测量 16 个外部和 2 个内部信号源。...
  • 基于STM32F103C8T6的HAL库交流ADC+串口输出+I2C显示例程,4路交流小信号+4路直流采集电压,交流频率计算,串口PA9、PA10输出,RTC时钟,模拟i2c显示输出,直接可以使用
  • stm32f103 adc采集 程序配置

    万次阅读 2017-01-17 14:31:03
    这个例程是采集电压adc值 对于通道几是如何选择的: 这里在adc初始化函数中,设置通道几的采样率只是设置要使用的通道几,并不是选择用通道几,真正的选择用通道几是在Get_Adc()AD采样这个函数中,ADC1->SQR3|=ch;...
  • stm32f103多路ADC检测电压

    千次阅读 多人点赞 2020-12-04 18:35:39
    stm32adc多路采集+dma传输 8路ADC adc.h #ifndef __ADC_H #define __ADC_H #include "sys.h" #define N 100 //每通道采100次,再求平均 #define M 8 //为8个通道 extern u16 AD_Value[N][M]; //用来存放ADC转换...
  • ADC模块采集电压流程 STM32 大部分系列都是使用SAR 逐次逼近型电压采集 VIN是采集的模拟输入口,VREF表示参考电压。Sa PIN和内部ADC的开关。Sb 接地开关。 电压采集阶段 电压采集阶段就是内部电容充电的过程。Sb...
  • 1、实现电压采集ADC1,PA0为电压检测点输入。 2、0.96寸OLED显示采集到的电压值。其驱动采用SSD1306。 3、密码:stm32。 4、解压后打开。
  • 该文件是使用STM32CubeMX和Keil开发的,基于STM32F103和光敏电阻传感器,通过ADC外设来获取光敏电阻传感器的数值
  • ADC-单通道-中断读取 ADC-单通道-DMA读取 ADC-多通道-DMA读取 ADC-规则同步,实测稳定可靠。
  • 分析:使用STM32CubeMX生成的工程,ADC配置没有对做ADC校准,导致采样值与实际值有较大误差; 在HAL_ADC_Start接口之前增加ADC校准接口HAL_ADCEx_Calibration_Start,另外采样周期设长ADC_SAMPLETIME_239CYCLES_5; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,031
精华内容 412
关键字:

stm32f103adc采集电压