STM32---ADC

ADC

概念

众所周知,GPIO只能读入高电平或者低电平,那如果现有一个模拟量,该如何读取呢,比如电压的范围是0~3.3v,如何获取电压的值。就需要ADC(Analog-Digital Converter)了。ADC可以将引脚上连续变化的模拟电压转变为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。

stm32f103自带的是12位逐次逼近型ADC,1us转换时间,这样最多可以输出0-4095的数字量。

框图

请添加图片描述

蓝色框,表示ADC有18个数据来源通道:ADCx_IN0~15、和内部的温度传感器、Verfint。

绿色框,表示注入组最多可以同时转化4个(所谓同时,其实是依次)。规则组最多可以同时转化16个数据。

橙色框:需要注意的是,注入通道数据寄存器有4个,转化好的数据一人一个;而规则通道数据寄存器只有一个,16个转好的数据共用一个。

蓝色箭头:ADC转化的触发源可以如图选择:外部中断触发、TIM…触发、内部软件触发。

在这里插入图片描述

ADC转化模式和扫描模式

**单次转化 非扫描模式:**只转化一次,就停止转化;不管配置几个数据源,只转化第一个,发出EOC信号。

在这里插入图片描述

**单次转化 扫描模式:**只转化一次,就停止转化;配置多个数据源,会依次转化完,然后发出EOC信号。

在这里插入图片描述

**连续转化 非扫描模式:**本轮转化结束后自动开始下一轮;不管配置几个数据源,只转化第一个,发出EOC信号。

在这里插入图片描述

**连续转化 扫描模式:**本轮转化结束后自动开始下一轮:配置多个数据源,会依次转化完,然后发出EOC信号。

在这里插入图片描述

单通道模式

流程:

  1. 初始化GPIO 模拟输入模式
  2. 设置ADC时钟 RCC_ADCCLKConfig()
  3. 设置ADC ADC_Init()
  4. 设置规则组 ADC_RegularChannelConfig
  5. 使能ADC
  6. 校准(4个函数)
  7. 触发,开始转换

代码

void AD_Init()
{// PA0 引脚初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;GPIO_Init(GPIOA, &GPIO_InitStruct);//ADC时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC内部时钟,PCLK2意为APB2总线时钟// 设置ADC ADC初始化ADC_DeInit(ADC1);  //复位ADC1 ADC_InitTypeDef ADC_InitStruct;ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;//ADC独立模式ADC_InitStruct.ADC_ScanConvMode =DISABLE;//非扫描(因为只有一个通道,不需要扫描)ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;//连续转化ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;//右对齐数据ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发 NONEADC_InitStruct.ADC_NbrOfChannel = 1; //要配置几个通道,这里是一个ADC_Init(ADC1, &ADC_InitStruct);// 配置规则组 ADC1 通道0的优先级是1,采样时间1.5   如果是多个通道,就多次配置该函数ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_1Cycles5);ADC_Cmd(ADC1, ENABLE);// ADC校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1));// ADC软件触发转换ADC_SoftwareStartConvCmd(ADC1, ENABLE);}//获取ADC转化后的原始数值
uint16_t AD_GetValue()
{// 获取ADC的EOC标志位,转换完成置SETwhile(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));// 获取值,读ADC的DR寄存区,读完后,会自动降EOC置RESETreturn  ADC_GetConversionValue(ADC1);
}

注:RCC时钟不仅要开启GPIO和ADC的,还要配置ADC内部的时钟,这个时钟来自于APB2总线时钟。

多通道模式(手动,非DMA)

在这里插入图片描述

如上就可以被称为多通道,四个模拟量接入PA0-PA3,

这是我们设置扫描模式,使用ADC1CH0-CH3

请添加图片描述

这里的四个通道有数据后,都往DR寄存器中写数据,如果不适用DMA转存,就会被覆盖。当四个通道的数据都搬运完后,才会发出一个EOC信号。

因为本节不涉及DMA,因此推荐另一种手动方法,使用非连续非扫描模式。该模式下,依次转化一个通道的数据,然后停止。

在该模式下,每次我们读取值之前,都设置将要读取的通道设置,然后触发,等待EOC,读值。与单通道模式相似。

//轮流多次配置规则组已达到多通道效果
uint16_t AD_GetValue_CHS(uint8_t ADC_Channel)
{// 配置规则组 ADC1 通道0的优先级是1,采样时间1.5   如果是多个通道,就多次配置该函数ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_1Cycles5);// ADC软件触发转换ADC_SoftwareStartConvCmd(ADC1, ENABLE);// 获取ADC的EOC标志位,转换完成置SETwhile(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));// 获取值,读ADC的DR寄存区,读完后,会自动降EOC置RESETreturn  ADC_GetConversionValue(ADC1);
}

根据形参选择通道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/743748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境下用IDEA运行Golang记录

一、背景 和存储同时开发AI项目,在Linux环境运行Golang项目,因此需要进行相关的配置。 二、Golang安装 参考:【Linux — 安装 Go】Linux 系统安装 Go 过程总结_linux 安装go-CSDN博客 三、IDEA中Golang配置 1、去除代理 否则在Plugins中…

4.MAC平台Python的下载、安装(含Python2.7+Python3.12双版本环境变量配置)——《跟老吕学Python编程》

4.MAC平台Python的下载、安装(含Python2.7Python3.12双版本环境变量配置)——《跟老吕学Python编程》)——跟老吕学Python编程 一、下载MAC版Python1.Python官网2.MAC版Python下载网址 二、在MAC安装Python1.在MAC安装Python2.阅读Python重要…

数据结构与算法之美学习笔记:不定期福利第三期 | 刘超:我是怎么学习《数据结构与算法之美》的?

目录 前言 前言 本节课程思维导图: 你好,我是刘超,是隔壁《趣谈网络协议》专栏的作者。今天来“串个门儿”,讲讲我学习《数据结构与算法之美》这个专栏的一些体会和感受。 《数据结构与算法之美》是目前“极客时间”订阅量最多的…

【Python】成功解决NameError: name ‘sns‘ is not defined

【Python】成功解决NameError: name ‘sns’ is not defined 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您…

国创证券策略:股指预计维持震荡格局 关注汽车、通信设备等板块

国创证券指出,近期两市指数持续反弹创新高,但沪指现已率先出现滞涨状况,一起均已进入阻力重压区。不过当时技术形状上坚持较好,可持续做多,一旦跌破重要支撑如沪指的3030点,则需降仓防卫,防止指…

Window11安装达梦数据库

由于现在流行国产化,很多公司的数据库产品都使用了国产数据库,所以,今天给大家讲解一下,达梦数据库的安装和试用,这样学完以后,就可以直接在公司里面用了。 首先,需要先注册账号,然…

Android的UI渲染机制(二)

安卓系统中有 2 种 vsync 信号: (1)屏幕产生的硬件 vsync信号,主要用于通知应用程序开始在自己的窗口“画布”中执行一帧画面的绘制和渲染 (2)由SurfaceFlinger将其转成的软件 vsync 信号,经由…

mysql不能远程连接的解决办法

问题: 安装完mysql之后,在本机可以正常使用,但是通过其它电脑不能远程连接. 解决方案: 在安装mysql的电脑上,登录mysql, 执行权限 GRANT ALL PRIVILEGES ON *.* TO root"%" IDENTIFIED BY "password"; 刷新权限 flush privileges;

【机器学习】一文掌握逻辑回归全部核心点(上)。

逻辑回归核心点-上 1、引言2、逻辑回归核心点2.1 定义与目的2.2 模型原理2.2.1 定义解析2.2.2 公式2.2.3 代码示例 2.3 损失函数与优化2.3.1 定义解析2.3.2 公式2.3.3 代码示例 2.4 正则化2.4.1 分类2.4.2 L1正则化2.4.3 L2正则化2.4.4 代码示例 3、总结 1、引言 小屌丝&#…

xcode15,个推推送SDK闪退问题处理办法

个推iOS推送SDK最新版本 优化了xcode15部分场景下崩溃问题,以及回执上传问题,近期您的应用有发版计划,建议更新SDK: 1)GTSDK更新到3.0.5.0以及以上版本; 2)GTCommonSDK更新到3.1.0.0及以上版本…

如何进行软件安全性测试?CMA、CNAS软件安全测试报告获取

软件安全性测试是保障软件应用安全的重要手段,通过对软件系统的安全性进行全面评估和检测,以确保软件能够抵御各种潜在的安全威胁和风险。那么如何进行软件安全性测试?CMA、CNAS软件安全测试报告又该如何获取呢? 软件安全性测试是一种基于黑盒测试的方…

齐鲁制药集团勇担社会责任,以行动诠释担当

作为一家深具家国情怀的医药企业,齐鲁制药集团在专注药品创新与品质升级的同时,始终谨记企业公民的社会责任,凭借在医药健康领域的专业优势,数十年如一日参与各类社会公益事业,时至今日,齐鲁足迹早已遍布全…

【数据结构】二叉树---AVL树的实现

目录 一. 什么是AVL树 二. AVL树的结点结构定义 三. AVL树的动态平衡法 1. 左单旋转 --- RL(RotateLeft) 型调整操作 2. 右单旋转 --- RR(RotateRight) 型调整操作 3. 先左后右双旋转 --- RLR (RotateLeftRight) 型调整操作 4. 先右后左双旋转 --- RRL (RotateRightL…

综合利用Cisco Packet Tracer模拟器配置园区网

1. 内容 1.在课室交换机中创建各个课室的VLAN,并将1-20端口平均分配给各个课室。 2.使用课室交换机的每个端口只能接入一台计算机,发现违规就丢弃未定义地址的包。3.网络内部使用DHCP分配各课室的IP地址,在课室交换机按照第一题划分的VLAN地…

Linux/BountyHunter

Enumeration nmap 第一次扫描发现系统对外开放了21,22,80端口,端口详细信息如下 和以前一样,先从80端口的http服务开始探索 TCP/80 访问站点,主页有三个按钮,about,contact和portal。看起来…

3D全景:为各行业提供更真实的交互体验

近年来,随着科技的不断发展,3D全景技术逐渐融入到了我们的日常生活中来。3D全景技术的应用落地,为广大用户提供了全新的视觉体验,让人们能够更加真实、直观地感受各行业的场景。 3D全景的优势就在于真实感和互动性,可以…

原型模式(Clone)——创建型模式

原型模式(clone)——创建型模式 什么是原型模式? 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需依赖它们所属的类。 总结:需要在继承体系下,实现一个clone接口,在这个方法中以本身作为拷…

openssl3.2 - exp - export ecc pubkey from ecc priv key

文章目录 openssl3.2 - exp - export ecc pubkey from ecc priv key概述笔记END openssl3.2 - exp - export ecc pubkey from ecc priv key 概述 前面实验已经生成了ECC私钥, 现在做从ECC私钥(内容为公私钥对, 里面既有私钥信息, 也有公钥信息)导出ECC公钥. 实验对应的命令行…

v-model 粗略解析

v-model 粗略解析 v-model是什么? 双向数据绑定,可以从data流向页面,也可以从页面流向data通常用于表单收集,v-model 默认绑定 value 值书写形式: v-model:value"" 或 v-model v-model原理是什么&#xf…

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高 信道模拟器,模拟通信信道受环境因素影响产生各种特征的仪器,主要由接收电路、发射电路、模拟器、主控CPU等组成,可用于外场环境或者实验室环境中。 根据新思界产业研究中心发布的《202…