之前弄过ADC连续转换,还配了DMA传输,项目上不希望这样做,因为有其他设备用到DMA传输,就会不停的抢占优先级,效率低。

按照需求改成ADC单次转换,非连续,用的时候只需调下函数执行一次转换即可。

GPIO配置:

 /**********************************************************************************************/
//ADC 配置
//PA3 - ADC123_IN3 可以使用ADC1的通道3、ADC2的通道3或ADC3的通道3,这里选择ADC1
//单通道和多通道转换时需修改几个地方
//ADC_InitStructure.ADC_NbrOfConversion = N;//N=1.2.3...N=1时,1个转换通道,N=2,2个通道连续转换
//ADC_InitStructure.ADC_ScanConvMode = DISABLE单通道扫描,ENABLE多通道扫描
//The total conversion time:Tconv = Sampling time + 12 cycles(固定值)
//Tconv = (ADC_SampleTime_84Cycles + 12) * ADCCLK = (84+12) * 1/15 = 6.4us ,ADCCLK = ADC_Prescaler_Div4 = 60M/4 = 15M
/*********************************************************************************************/
#include "ADC_DMA.h"
#define SIZE 1
#define ADC1_DR_Address ((u32)0x4001204C) //外设地址 void ADC_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
ADC_InitTypeDef ADC_InitStructure;
ADC_CommonInitTypeDef ADC_CommonInitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* Configure ADC1 Channel 3 (PA3)pin as analog input ******************************/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
GPIO_Init(GPIOA, &GPIO_InitStructure); /* ADC Common Init **********************************************************/
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4; //60M/4=15M max value is 30MHz
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; //12bit
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //扫描模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //非连续转换
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //软件触发
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
ADC_InitStructure.ADC_NbrOfConversion = SIZE; //通道数量
ADC_Init(ADC1, &ADC_InitStructure); // The total conversion time:Tconv = Sampling time + 12 cycles(固定值)
// Tconv = (84 + 12) * ADCCLK = 96 * 1/15 = 6.4us ,ADCCLK = ADC_Prescaler_Div4 = 60M/4 = 15M
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, , ADC_SampleTime_84Cycles); //采样时间,时间越长,数据越稳定
// ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); /* Enable DMA request after last transfer (Single-ADC mode) */
// ADC_DMACmd(ADC1, ENABLE); /* Enable ADC1 DMA */
// ADC_Cmd(ADC1, ENABLE); /* Enable ADC1 */ }

单次转换函数:

 /****************************************************/
//参数: number,转换次数
//功能: 获取ADC单次转换累加后的均值
//返回值:ADC转换后的均值
/****************************************************/
uint16_t Get_ADC_Convert_Average_Result(uint8_t number)
{
uint8_t i = number;
uint16_t adc_ConversionValue = ; while(i--)
{
ADC_Cmd(ADC1, ENABLE);
ADC_ClearFlag(ADC1, ADC_FLAG_EOC);
ADC_SoftwareStartConv(ADC1);
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
adc_ConversionValue += ADC_GetConversionValue(ADC1);
ADC_Cmd(ADC1, DISABLE);
} adc_ConversionValue = adc_ConversionValue/number;
return adc_ConversionValue;
}

获得转换值后,在进行数据转换,转换电压形式格式:

 uint16_t ADC_Value = Get_ADC_Convert_Average_Result(ADC_Convert_Number);
float adc_voltage_value = (ADC_Value/4096.0)*3.3;
printf("ADC_value = %d ,V = %4.4fV \r\n",ADC_Value,adc_voltage_value);

经测试OK,已放置在项目上使用。

STM32 一通道单次转换的更多相关文章

  1. STM32F10x_ADC三通道DMA连续转换(3通道、软件单次触发)

    Ⅰ.概述 上一篇文章讲述的内容是:三通道逐次转换(单次.单通道软件触发),也就是说3条通道要三次软件触发才能完成转换,而且是通过软件读取转换数值. 本文讲述三通道DMA连续转换(3通道.软件单次触发) ...

  2. STM32 之ADC单次转换模式和连续转换模式

    一.背景 在STM32中的AD的单通道采样中可以设置成单次转换模式和连续转换模式,如何理解这两个转换模式的区别,通过程序又是怎样实现的? 二.正文 首先理解单次转换模式,即ADC进行单次转换(单样本) ...

  3. 在一般处理程序中,把Form Post过来的表单集合转换成对象 ,仿 MVC post,反射原理

    using System; using System.Collections.Generic; using System.Collections.Specialized; using System.L ...

  4. stm32cube--ADC单次转换

    stm32cube的ADC配置 ① ② ③ ④ ⑤ 二:用到的函数 HAL_StatusTypeDef       HAL_ADCEx_Calibration_Start(ADC_HandleType ...

  5. sqlserver2012一直显示正在还原(Restoring)和从单用户转换成多用户模式(单用户连接中)

    如果不需要还原,则使用: restore database test with recovery如果只需要还原,则使用: restore database test with norecovery U ...

  6. STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)

    Ⅰ.概述 本文讲述关于STM32功能比较强大的ADC模块.ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三 ...

  7. [置顶] STM32的ADC1采集多条通道,可以不使用DMA功能吗?

    类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器.它有多达18条 ...

  8. stm32 引脚映射 和 ADC

    老是弄不明白ADC的输入到底在哪,看了stm32F103Ve的datasheet,将引脚和通道的映射关系贴在下面: 好了,写到这,我已经看了中文手册一上午了,可是啥都没看懂,下午接着看,写代码不重要, ...

  9. msp430学习笔记-ADC12

    本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013748.HTM MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,它具有高速度,通用性等特 ...

随机推荐

  1. checkbox:全选与反全选

    $(document).ready(function () { //全选checkbox $("#selectAll").click(function () { var check ...

  2. Voting

    Voting time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  3. Python修炼10------面向对象

    面向对象-----类 类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),用它来生产真实的物体(实例). 对象:什么叫对象:睁开眼,你看到的一切的事物都是一个个的 ...

  4. fiddler抓包使用①

    链接:http://jingyan.baidu.com/article/3a2f7c2e0d5f2126aed61175.html   设置好代理后,有的设备需要访问"192.168.1.1 ...

  5. Zookeeper实现分布式锁服务(Chubby)

    在分布式系统中,如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰,来保证一致性,在这种情况下,便需要使用到分布式锁例如有N台服务器同时 ...

  6. SQLite安装

    SQLite 的一个重要的特性是零配置的,这意味着不需要复杂的安装或管理.本章将讲解 Windows.Linux 和 Mac OS X 上的安装设置. 一.在Windows上安装SQLite 访问SQ ...

  7. Jedis操作redis(转)

    package org.jzkangta.jedis; import java.util.ArrayList; import java.util.HashMap; import java.util.I ...

  8. Linux服务器rsync自动备份

    一.在 server 端配置 1. 编辑配置文件 #vi /etc/rsyncd.conf 添加下面的配置参数: uid = nobody # 该选项指定当该模块传输文件时守护进程应该具有的uid.默 ...

  9. CodeForces 696C PLEASE

    快速幂,费马小定理,逆元. 设$dp[n]$表示$n$次操作之后的概率,那么$dp[n] = \frac{{(1 - dp[n - 1])}}{2}$.$1-dp[n - 1]$表示上一次没有在中间的 ...

  10. UVa 536 Tree Recovery | GOJ 1077 Post-order (习题 6-3)

    传送门1: https://uva.onlinejudge.org/external/5/536.pdf 传送门2: http://acm.gdufe.edu.cn/Problem/read/id/1 ...