1 void ADC_Configure(void)
2 {
3 ADC_InitTypeDef ADC_InitStructure;
4   GPIO_InitTypeDef GPIO_InitStructure;
5 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
6   RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
7
8 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
9 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
10 GPIO_Init(GPIOA, &GPIO_InitStructure);
11
12 RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC时钟分频 2,4,6,8
13 ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //独立工作模式
14 ADC_InitStructure.ADC_ScanConvMode=ENABLE; //工作在扫描模式
15 ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; //连续模式
16 ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; //转换由软件触发启动
17 //ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC1; //定时器1的捕获比较通道1作为外部触发转换源(T1_2,T1_3,T2_2,T4_4)
18 //ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_Ext_1T11; //外部中断通道11的事件作为外部触发转换源
19 ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; //ADC数据右对齐
20 ADC_InitStructure.ADC_NbrOfChannel =5; //进行规则转换的ADC通道的数目为2
21 ADC_Init(ADC1,&ADC_InitStructure);
22 ADC_RegularChannelConfig(ADC1,ADC_Channel_2,1,ADC_SampleTime_55Cycles5); //选择通道2,转换顺序1,采样时间为1.5周期
23 ADC_RegularChannelConfig(ADC1,ADC_Channel_3,2,ADC_SampleTime_55Cycles5); //选择通道3,转换顺序2,采样时间为1.5周期
24 ADC_RegularChannelConfig(ADC1,ADC_Channel_4,3,ADC_SampleTime_55Cycles5); //选择通道4,转换顺序3,采样时间为1.5周期
25 ADC_RegularChannelConfig(ADC1,ADC_Channel_5,4,ADC_SampleTime_55Cycles5); //选择通道5,转换顺序4,采样时间为1.5周期
26 ADC_RegularChannelConfig(ADC1,ADC_Channel_6,5,ADC_SampleTime_55Cycles5); //选择通道6,转换顺序5,采样时间为1.5周期
27 ADC_DMACmd(ADC1, ENABLE);
28 ADC_Cmd(ADC1,ENABLE); //使能AD1
29 ADC_ResetCalibration(ADC1); //复位ADC1的校准寄存器
30 ADC_StartCalibration(ADC1); //开始ADC1的校准
31 while(ADC_GetCalibrationStatus(ADC1)); //等待ADC1校准完成
32 ADC_SoftwareStartConvCmd(ADC1,ENABLE); //启动ADC1转换
33 }
34 void DMA_Configure(void)
35 {
36 DMA_InitTypeDef DMA_InitStructure;
37 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
38 DMA_DeInit(DMA1_Channel1); //复位DMA1通道
39 DMA_InitStructure.DMA_PeripheralBaseAddr=DR_ADDRESS;
40 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ad_value;
41   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //外设作为数据传输的来源
42 DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
43  DMA_InitStructure.DMA_BufferSize = 5; //
44 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址不变
45 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址递增
46 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据宽度为16位
47 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //内存数据宽度为16位
48 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //循环缓存模式
49 DMA_InitStructure.DMA_Priority = DMA_Priority_High; //高优先级
50 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //没有设置内存到内存的传输
51 DMA_Init(DMA1_Channel1, &DMA_InitStructure);
52 DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);
53 DMA_Cmd(DMA1_Channel1,ENABLE); //开启DMA1通道传输
54 }

STM32F1库函数初始化系列:DMA—ADC采集的更多相关文章

  1. ADC-单通道DMA到多通道DMA ADC采集修改事项

    1. 使能通道IO,因为从单通道到多通道,需要添加规则转换通道数,故需要使能扫描模式,否则只能扫描第一个通道: 2. DMA模式配置需修改为循环传输模式,否则只转换一次: 3. 开启ADC规则转换通道 ...

  2. STM32之DMA+ADC

    借用小甲鱼的经典:各位互联网的广大网友们.大家早上中午晚上好..(打下小广告,因为小甲鱼的视频真的很不错).每次看小甲鱼的视频自学都是比较轻松愉快的..我在想,如果小甲鱼出STM32的视频,我会一集不 ...

  3. TMS320VC5509片内ADC采集

    1. ADC采集比较简单,内部的10位的ADC,AIN0-AIN3的输入,主要是用的CSL的库函数#include <csl_adc.h> ; Uint16 samplestoraage[ ...

  4. 关于esp32的ADC采集

    对于ADC采集 程序源码如下: /* ADC1 Example This example code is in the Public Domain (or CC0 licensed, at your ...

  5. 关于ADC采集

    对于ADC采集,想问的一些问题 1.如何初始化? 需要初始化 2.哪里可以看到是多少位采集? 3.8位ADC采集的误差是多少? 4.基准电压从哪里取?

  6. CC2530的ADC采集外部电压

    初窥ZIGBEE 要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样.下面是自己对实现用CC2530的ADC采集外部电压的程序过程. 以下是A ...

  7. ADC采集电流相关知识

    1.AD电流采样电路,是把电路中的电流用采样元件转换为电压信号,然后用ADC量化转换为相应的数字信号.需要你在被采集端串联一个采样电阻,然后采集采样电阻两端的电压,这样就可以把电流输出变换为电压输出. ...

  8. STM32L15x——ADC采集DMA数据只第一次正确(已解决)

    前提:我用的芯片是STM32L系列,可能对其它STM32系列不完全适用,仅供参考! 一.问题描述 我在使用DMA方式读取单ADC单通道采集的数据时,发现只能正确的采集一次数据,后来的就一直与第一次的相 ...

  9. STM32F405的内部ADC采集

    1. ADC的初始化部分基本一致,下面是引脚复用配置 void HAL_ADC_MspInit(ADC_HandleTypeDef *hadc) { GPIO_InitTypeDef GPIO_Ini ...

  10. STM32F103VET6 ADC采集64点做FFT变换

    http://www.stmcu.org/module/forum/thread-598459-1-11.html http://bbs.21ic.com/icview-589756-1-1.html ...

随机推荐

  1. 24、编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2.

    /* 编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2. */ #in ...

  2. vcenter密码设置永不过期

    由于机房断电,原本的vcenter重启后web页面出现报错,为尽快恢复vcenter管理机,直接停用了旧的vcenter虚机,重新安装了一台vcenter,两个月后,页面开始报警密码即将到期: 经查阅 ...

  3. Linux C++目标中添加git版本信息

    项目代码根目录下添加一个cmake文件git_version.cmake,内容如下: # get git hash macro(get_git_hash _git_hash) set(ENV{GIT_ ...

  4. github访问慢怎么办

    前言 访问github网速老不好?老掉线?下载贼慢?或许这篇笔记可以帮助你! Github访问慢的根本原因其实是CDN内容分发受到DNS污染,无法连接使用igithub的加速分发服务器,所以国内访问时 ...

  5. 【数据库】Oracle建表、创建序列、添加触发器生成自增主键

    CREATE TABLE "TEST"."T_ORDER" (    "AUUID_0" VARCHAR2 ( 255 ) NOT NULL ...

  6. 自己动手基于 Redis 实现一个 .NET 的分布式锁

    分布式锁的核心其实就是采用一个集中式的服务,然后多个应用节点进行抢占式锁定来进行实现,今天介绍如何采用Redis作为基础服务,实现一个分布式锁的类库,本方案不考虑 Redis 集群多节点问题,如果引入 ...

  7. 浅聊一下Django如何避免xss攻击

    一.什么是xss攻击 xss攻击:----->web注入 xss跨站脚本攻击(Cross site script,简称xss)是一种"HTML注入",由于攻击的脚本多数时候是 ...

  8. 分享一个自己项目中用到的.net中正则替换工具处理类(支持先用特征匹配内容整体模板,同时模板内对相关字内容进行替换)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. [python] mxnet60分钟入门Gluon教程

    mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用.入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course ...

  10. HBase详解(02) - HBase-2.0.5安装

    HBase详解(02) - HBase-2.0.5安装 HBase安装环境准备 Zookeeper安装 Zookeeper安装参考<Zookeeper详解(02) - zookeeper安装部署 ...