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. ubuntu undefined reference to

    温馨提示,请使用ctrl+F进行快速查找 libdl.so undefined reference to `dlsym' undefined reference to `dlopen' undefin ...

  2. Java阻塞队列中的异类,SynchronousQueue底层实现原理剖析

    上篇文章谈到BlockingQueue的使用场景,并重点分析了ArrayBlockingQueue的实现原理,了解到ArrayBlockingQueue底层是基于数组实现的阻塞队列. 但是Blocki ...

  3. 关于CSDN发布博客接口的研究

    前言 其实我之前就有一个想法,实现用 python 代码来发布博客, 因为我个人做了一个发布到 github 博客软件(其实就是实现 git 命令集成,还有markdown的渲染的软件), 如果我弄明 ...

  4. oracle 中模糊查询对like的代替insrt()函数 可以做到效率节约一倍以上

    昨天在处理一个字符拆分的功能时,用用到了insrt()函数,偶然发现其实特可以代替模糊查询的like,经多次测试可节约效率一倍以上. 代码如下: select distinct(a.deptname) ...

  5. 【每日一题】【小根堆&边出队边入队后续节点&注意判空】23. 合并K个升序链表-211128/220213

    给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 答案1(参数是数组): /** * Definition for singly-linked li ...

  6. C#深拷贝方法

    概述 为什么要用到深拷贝呢?比如我们建了某个类Person,并且实例化出一个对象,然后,突然需要把这个对象复制一遍,并且复制出来的对象要跟之前的一模一样,来看下我们一般会怎么做. 方法一(利用反射实现 ...

  7. Kubernetes环境鉴权与自动发现

    概览文章中提到了k8s的鉴权模式,简单回顾下: RBAC: Role-based access control 是基于角色的访问控制 ABAC: Atrribute-based access cont ...

  8. 8个Spring事务失效的场景,你碰到过几种?

    前言 作为Java开发工程师,相信大家对Spring种事务的使用并不陌生.但是你可能只是停留在基础的使用层面上,在遇到一些比较特殊的场景,事务可能没有生效,直接在生产上暴露了,这可能就会导致比较严重的 ...

  9. APP异常测试点汇总

    在测试APP时异常测试是非常必要的. 安装卸载中的异常测试 一.安装 安装过程中设备重启 安装过程中息屏 安装过程中断网 安装过程中切换网络 安装过程中收到短信提醒 安装过程中收到来电提醒 安装过程中 ...

  10. kali安装拼音输入法

    前言 最近使用kali感觉没个中文输入法的很不方便,于是决定装个ibus的拼音输入法 安装方法 1.安装ibus 使用命令apt install ibus ibus-pinyin,注意使用root权限 ...