转载:http://home.eeworld.com.cn/my/space-uid-361439-blogid-239703.html

STM32F407ADC采样实验

热度 1已有 5472 次阅读2014-10-8 18:30 |个人分类:STM32F4XX/1XX/2XX/3XX/stm8s

最近公司又做了一款407的样板,正好需要用到407的ADC功能,需要用PC.2来检测RFID芯片的射频电源功率,首先看了下407的数据手册

  
可以配置到ADC1/2/3任何一个控制器的信道12上面.我打算将PC.2映射到ADC3上面和使用DMA功能,又看了下DMA的请求映射表,ADC3使用的DMA2的流0信道2

.............................................................................................

编程思路:

首先将DMA和IO以及ADC的时钟使能,其次将相应的IO配置成输入模式,最后配置DMA和ADC

注意

/*定义ADC3的数据寄存器地址,DMA功能要用到外设的数据地址
 *ADC3的数据地址为外设基地址+偏移地址,基地址在RM0090 Reference
 *manual(参考手册)的地址映射表里,为0x40012200,ADC_DR
 *偏移地址为0x4C,故实际地址为0x40012200+0x4C = 0x4001224C */
#define ADC3_DR_Address   ((uint32_t)0x4001224C)

代码详见:

void Adc3_Init(void)

{

/* Enable peripheral clocks ------------------------------------------------*/

/* Enable DMA1 clock */

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2 | RCC_AHB1Periph_GPIOC, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);

GPIO_Configuration();

DMA_Configuration();

}

void DMA_Configuration(void)

{

ADC_InitTypeDef ADC_InitStructure;

DMA_InitTypeDef DMA_InitStructure;

ADC_CommonInitTypeDef ADC_CommonInitStructure;

/* DMA2 Stream0 channel0 configuration **************************************/

DMA_InitStructure.DMA_Channel = DMA_Channel_2;

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC3_DR_Address;

DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADCConvertedValue;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;

DMA_InitStructure.DMA_BufferSize = 1;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_High;

DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;

DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;

DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;

DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;

DMA_Init(DMA2_Stream0, &DMA_InitStructure);

DMA_Cmd(DMA2_Stream0, ENABLE);

/* ADC Common Init **********************************************************/

ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;

ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;

ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

ADC_CommonInit(&ADC_CommonInitStructure);

/* ADC3 Init ****************************************************************/

ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;

ADC_InitStructure.ADC_ScanConvMode = DISABLE;         // PS :  在多通道 2个通道以上 该选项应该使能

ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;

ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

ADC_InitStructure.ADC_NbrOfConversion = 1;

ADC_Init(ADC3, &ADC_InitStructure);

/* ADC3 regular channel12 configuration *************************************/

ADC_RegularChannelConfig(ADC3, ADC_Channel_12, 1, ADC_SampleTime_3Cycles);

/* Enable DMA request after last transfer (Single-ADC mode) */

ADC_DMARequestAfterLastTransferCmd(ADC3, ENABLE);

/* Enable ADC3 DMA */

ADC_DMACmd(ADC3, ENABLE);

/* Enable ADC3 */

ADC_Cmd(ADC3, ENABLE);

/* Start ADC3 Software Conversion */

ADC_SoftwareStartConv(ADC3);   //如果不是外部触发则必须软件开始转换

}

/**

* @brief  Configures the different GPIO ports.

* @param  None

* @retval None

*/

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

/* Configure PC.2 (ADC Channel2) PC.1 (ADC Channel1) as analog input -------------------------*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;

GPIO_Init(GPIOC, &GPIO_InitStructure);

}

PS:   以上程序有错误:  在配置DMA的时候需要先使能DMA时钟

STM32F407 ADC DMA 采样实验的更多相关文章

  1. 关于Stm32定时器+ADC+DMA进行AD采样的实现

    Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进 ...

  2. stm32CubeMx 实现单通道ADC DMA采集

    今天要做的是ADC单通道DMA采集实验 MCU : STM32F429 开发工具:STM32CubeMx 版本号 5.0.0 实验目的:实现ADC1 13通道 DMA采集 一 :简介 首先,我们来看一 ...

  3. DSP基础学习-ADC同步采样

    DSP基础学习-ADC同步采样 彭会锋 2015-04-28 20:31:06 在DSP28027 LauchPad学习过程中,关于ADC同步采样和顺序采样的区别稍加研究了一下,发现里面还真有些门道, ...

  4. Hi3518EV200平台ADC多通道采样

    Hi3518EV200平台ADC多通道采样流程 Hi3518EV200 ADC 本文针对Hi3518EV200平台处理器,通过ADC单次采样方式,实现对多通道(1~4通道)ADC进行采样控制.本文仅仅 ...

  5. STM32 F4 ADC DMA Temperature Sensor

    STM32 F4 ADC DMA Temperature Sensor Goal: detecting temperature variations using a temperature senso ...

  6. STM32CubeMX 多通道 ADC DMA 配置 测试小程序

    要点: 1.STM32F103C8T6单片机 2.ADC+DMA 多通道 重点是ADC+DMA配置,ADC+DMA配置如下 其他配置略略略略. 然后各位自行直看.ioc文件,生成代码后在while之前 ...

  7. 基于STM32Cube的ADC模数采样设计

    1.背景         此实验建立在STM32F429核心板基础上,对于深刻了解STM32Cube使用具有深刻意义.利用DMA进行ADC采样,具有速度快,极大减少CPU消耗的优势,对于数据采集系统具 ...

  8. stm32 ADC模数转换 ADC多通道 ADC DMA

    通过调节电位器,改变AD转换值和电压值 STM32F1 ADC 配置步骤 1.使能GPIO时钟和ADC时钟 2.配置引脚模式为模拟输入 3.配置ADC的分频因子 4.初始化ADC参数,ADC_Init ...

  9. 记STM32F030多通道ADC DMA读取乱序问题

    问题描述通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值,但是这个数组数值的顺序总是和ADC不是顺序对应的.比如用7个通道的ADC,当设置ADC_InitStructure ...

随机推荐

  1. Java内存管理:深入Java内存区域

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝 ...

  2. 敏捷开发的特点(转自MBAlib)

    敏捷开发的特点 敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征: (1)敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive). 这里说的预设 ...

  3. nutch 采集到的数据与实际不符

    现象,这个网站我总计能抽取将近500个URL,但实际只抽取了100条 解析:nutch默认从一个页面解析出的链接,只取前 100 个. <property> <name>db. ...

  4. java连接oracle数据库的实现代码

    package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; impo ...

  5. [转载]C# 中对html 标签过滤

    private string FilterHTML(string html) { System.Text.RegularExpressions.Regex regex1 = new System.Te ...

  6. APT攻防对抗

    APT(高级持续性威胁)攻击是指近年来,专业甚至是有组织和国家背景支持的黑客,针对重要目标和系统发起的一种攻击手段,主要特征有 1)持续性:攻击者为了重要的目标长时间持续攻击直到攻破为止.攻击成功用上 ...

  7. UINavigationController使用的注意事项

    1.常用属性viewControllers //所有在栈中的控制器topViewController //栈顶控制器navigationBar //导航栏 竖屏下默认44,横屏默认32 2.对navi ...

  8. Integer.valueOf与Integer.parseInt的小疑惑

    参考博客: http://www.importnew.com/9162.html 测试代码如下: public class Main { /** * 备注:结果跟你的JDK版本有关系: * * 我的是 ...

  9. easyui源码翻译1.32--DateBox(日期输入框)

    前言 扩展自$.fn.combo.defaults.使用$.fn.datebox.defaults重写默认值对象.下载该插件翻译源码 日期输入框结合了一个可编辑的文本框控件和允许用户选择日期的下拉日历 ...

  10. edx 配置smtp发送邮件

    参考文章:https://github.com/CDOT-EDX/ProductionStackDocs/wiki/Enable-SMTP-for-EDX-(Production-Stack) 具体到 ...