此代码欲实现的功能是:使用中断或者DMA的方式采集滑动变阻器采集到的电压值,使用单ADC单通道采样!

(由于不是直接需要电压,所以转换函数我就没列出来,可根据自身需要去网上查到转换的函数。)

代码结构树为:

|————ADC_GPIO_Config(void)
   ADC_Config(void)|————ADC_Mode_Config(void)
                             |_______ADC_NVIC_Config(void) / ADC_DMA_Config(void)

ADC_GPIO_Config:

void ADC_GPIO_Config(void)
{
//初始化PA2引脚
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIO_InitStruct.GPIO_Pin = ADC_GPIO_PIN;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(ADC_GPIO_PORT,&GPIO_InitStruct); }

ADC_Mode_Config:

void ADC_Mode_Config(void)
{
ADC_InitTypeDef ADC_InitStruct;
RCC_HSICmd(ENABLE); //开启HSI时钟,非常重要,stm32l151的时钟由HSI提供
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//开启ADC时钟
ADC_DeInit(ADC1);
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStruct.ADC_ScanConvMode = DISABLE;//不使用扫描模式
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;//使能连续转换
ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//不使用外部触发,无需设置
ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
ADC_InitStruct.ADC_NbrOfConversion = ADC_Channel_1;//使用的通道数=1
ADC_Init(ADC1,&ADC_InitStruct);
ADC_RegularChannelConfig(ADC1,ADC_Channel_2,,ADC_SampleTime_4Cycles);//配置ADC的通道转换顺序和采样时间
#if ADC_DMA_ENABLE
ADC_DMARequestAfterLastTransferCmd(ADC1,ENABLE); //开启ADC_CR2的DDS位,使DMA完成后可以自动开始
ADC_DMACmd(ADC1,ENABLE); //开启DMA
#else
ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE); //使能规则通道转换完成中断
#endif
ADC_Cmd(ADC1,ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET); //等待ADC启动完成
ADC_SoftwareStartConv(ADC1);
}

ADC_NVIC_Config:

void ADC_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //配置组优先级
NVIC_InitStruct.NVIC_IRQChannel = ADC1_IRQn; //选择中断源
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = ; //抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = ; //子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //开总中断
NVIC_Init(&NVIC_InitStruct); //初始化结构体
}

ADC_DMA_Config:

void ADC_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStruct;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
DMA_DeInit(DMA1_Channel1); //DMA复位 DMA_InitStruct.DMA_PeripheralBaseAddr = ADC_DR_ADDRESS; //外设地址
DMA_InitStruct.DMA_MemoryBaseAddr = ((uint32_t) &ADC_Data); //存储器地址
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC; //ADC发出数据
DMA_InitStruct.DMA_BufferSize = ; //传输数据数量
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //串口数据寄存器只有一个,不自增
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Disable; //存储器地址不自增
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据宽度:半字d
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //存储器数据传输宽度
DMA_InitStruct.DMA_Mode = DMA_Mode_Circular; //循环发送
DMA_InitStruct.DMA_Priority = DMA_Priority_High; //优先级为高
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable; DMA_Init(ADC_DMA_CHANNEL,&DMA_InitStruct); //ADC的DMA使用通道ADC1通道1
DMA_Cmd(ADC_DMA_CHANNEL, ENABLE); }

Note:中断和DMA的代码我都给出来了,根据自身需要选择。

STM32L1xx——ADC(中断/DMA)样例代码的更多相关文章

  1. 使用ffmpeg实现转码样例(代码实现)

    分类: C/C++ 使用ffmpeg实现转码样例(代码实现) 使用ffmpeg转码主要工作如下: Demux -> Decoding -> Encoding -> Muxing 其中 ...

  2. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  3. ECharts组件应用样例代码

    一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...

  4. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  5. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  6. C#调用 Oracle 存储过程样例代码

    -- 建表 CREATE TABLE sale_report (      sale_date DATE NOT NULL ,      sale_item VARCHAR(2) NOT NULL , ...

  7. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...

  8. C编程规范, 演示样例代码。

    /*************************************************************** *Copyright (c) 2014,TianYuan *All r ...

  9. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

  10. [Python] SQLBuilder 演示样例代码

    用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...

随机推荐

  1. MVP模式的学习

    简书: http://www.jianshu.com/p/f6fd9656f619 Github: https://github.com/tsaievan/YFMVPDemo

  2. 微信小程序文字超过行后隐藏并且显示省略号

    在小程序开发过程中,经常会遇到一些数据无法在text中完全展示,所以会使用到隐藏相关文字,并在后方加上省略号(...). 只需要在对应的text中设置下面的css就可以了. overflow:hidd ...

  3. 【算法导论】--分治策略Strassen算法(运用下标运算)【c++】

    由于偷懒不想用泛型,所以直接用了整型来写了一份 ①首先你得有一个矩阵的class Matrix ②Matrix为了方便用下标进行运算, Matrix的结构如图:(我知道我的字丑...) Matrix. ...

  4. mysql写存储过程根据时间变化增加工龄

    在工作中遇到要程序根据时间自动增加工龄的需求. php没办法自己发起请求,又不想在服务器上写计划任务crontab,通过用户请求来更改又不能保证用户会去操作. 用数据库的存储过程和事件来完成. 数据库 ...

  5. manjaro Docker环境配置记

    1.系统配置如下: ‘by: /home/inkhin/桌面/深度截图_选择区域_20191004145104.png [吐槽: ChromeLinux版居然不能用博客园TinyMce的上传图片功能] ...

  6. Vmare虚拟机安装麻烦二三事

    1).如何把虚拟机完整的迁移到另一个磁盘空间 2).VMware启动时提示我已移动或我已复制该虚拟机 3).虚拟机上显示主ip地址网络信息不可用怎么解决 4).vmware15虚拟机安装mac os ...

  7. matplotlib画图总结--多子图布局

    1.subplot布局 subplot(nrows, ncols, index, **kwargs) subplot(pos, **kwargs) subplot(ax) x=[1,2,3] valu ...

  8. Linux系列(14)之工作管理

    1.工作管理 说明:工作管理(job control)是用在bash环境下的,也就是说:“当我们登录系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理”.举例说明,我们在登 ...

  9. ACM-ICPC 2018 徐州赛区网络预赛 I. query 树状数组

    I. query 题目链接: Problem Description Given a permutation \(p\) of length \(n\), you are asked to answe ...

  10. linux fork进程请谨慎多个进程/线程共享一个 socket连接,会出现多个进程响应串联的情况。

    昨天组内同学在使用php父子进程模式的时候遇到了一个比较诡异的问题 简单说来就是:因为fork,父子进程共享了一个redis连接.然后父子进程在发送了各自的redis请求分别获取到了对方的响应体. 复 ...