STM32 ADC介绍和应用
目录
1.ADC是什么?
2.ADC的性能指标
3.ADC特性
4.ADC通道
5.ADC转换顺序
6.ADC触发方式
7.ADC转化时间
8.ADC转化模式
扫描模式
单次转换/连续转换
9.ADC实验
使用ADC读取烟雾传感器的值
代码实现思路:
1.ADC是什么?
全称:Analog-to-Digital Converter,指模拟/数字转换器
2.ADC的性能指标
- 量程:能测量的电压范围
- 分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如:8、10、12、 16位等;位数越多,分辨率越高,一般来说分辨率越高,转化时间越长
- 转化时间:从转换开始到获得稳定的数字量输出所需要的时间称为转换时间
3.ADC特性
- 12位精度下转换速度可高达1MHZ
- 供电电压:V SSA :0V,V DDA :2.4V~3.6V
- ADC输入范围:VREF- ≤ VIN ≤ VREF+
- 采样时间可配置,采样时间越长, 转换结果相对越准确, 但是转换速度就越慢
- ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中
4.ADC通道
总共2个ADC(ADC1,ADC2),每个ADC有18个转换通道: 16个外部通道、 2个内部通道(温度 传感器、内部参考电压)。
外部的16个通道在转换时又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多 有4路。
- 规则组:正常排队的人
- 注入组:有特权的人(军人、孕妇)
5.ADC转换顺序
每个ADC只有一个数据寄存器,16个通道一起共用这个寄存器,所以需要指定规则转换通道的转 换顺序。
规则通道中的转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器。SQR寄 存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通 道就是第x个转换。
和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个 JSQR寄存器来控制,控制关系如下:

注入序列的转换顺序是从JSQx[ 4 : 0 ](x=4-JL[1:0])开始。只有当JL=4的时候,注入通道的转换 顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。
6.ADC触发方式
- 1. 通过向控制寄存器ADC-CR2的ADON位写1来开启转换,写0停止转换。
- 2. 也可以通过外部事件(如定时器)进行转换。
7.ADC转化时间
ADC是挂载在APB2总线(PCLK2)上的经过分频器得到ADC时钟(ADCCLK),最高 14MHz
- 转换时间=采样时间+12.5个周期
12.5个周期是固定的,一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能 是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us (14/12M)
8.ADC转化模式
扫描模式
- 关闭扫描模式:只转换ADC_SQRx或ADC_JSQR选中的第一个通道
- 打开扫描模式:扫描所有被ADC_SQRx或ADC_JSQR选中的所有通道
单次转换/连续转换
- 单次转换:只转换一次
- 连续转换:转换一次之后,立马进行下一次转换
9.ADC实验
使用ADC读取烟雾传感器的值
CubeMX配置
时钟配置:

ADC配置:

串口配置:

代码实现思路:
- 启动ADC单次转换
- 等待ADC转换完成
- 读取ADC转换数据
- 重定向printf将数据发送到上位机
核心代码示例:
#include <stdio.h>//重定向printf
int fputc(int ch, FILE *f)
{ unsigned char temp[1]={ch};HAL_UART_Transmit(&huart1,temp,1,0xffff); return ch;
}//main函数部分while (1){HAL_ADC_Start(&hadc1); // 启动ADC1转换HAL_ADC_PollForConversion(&hadc1, 50); // 等待ADC转换完成smoke_value = HAL_ADC_GetValue(&hadc1); // 读取ADC转换数据printf("smoke_value = %f\r\n", 3.3/4096 * smoke_value);// 4096 = 2^12HAL_Delay(500);}
相关文章:
STM32 ADC介绍和应用
目录 1.ADC是什么? 2.ADC的性能指标 3.ADC特性 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 扫描模式 单次转换/连续转换 9.ADC实验 使用ADC读取烟雾传感器的值 代码实现思路: 1.ADC是什么? 全称&#…...
vue项目打包_以生产环境prod模式打包_vue-cli-service 不是内部或外部命令,也不是可运行的程序---vue工作笔记0025
打开命令行: 首先执行npm install 不执行会报错: npm run build:prod --scripts-prepend-node-pathauto 然后再这样执行就是以生产环境模式打包了....
FreeSWITCH的liberal dtmf
sip profile配置liberal-dtmf为true,或者通道变量rtp_liberal_dtmf为true,其含义就是不挑剔协商的DTMF,offer rfc2833并接受远端的rfc2833 和SIP INFO。 sofia.c的部分内容: // 收到sip info的处理 void sofia_handle_sip_i_inf…...
透明度模糊Android实现
最近有个需求,需要透明度加模糊,并且无法通过Glide的方式实现。研究后发现有一个第三方库可以实现这个效果 implementation com.github.Dimezis:BlurView:version-2.0.3在activity的onCreate()方法中 实现效果 可以看到上边的bar…...
JavaScript学习笔记04
JavaScript笔记04 方法 定义方法 当一个函数是一个对象的属性时,称之为方法。例: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script>let p…...
18 Python的sys模块
概述 在上一节,我们介绍了Python的os模块,包括:os模块中一些常用的属性和函数。在这一节,我们将介绍Python的sys模块。sys模块提供了访问解释器使用或维护的变量,以及与解释器进行交互的函数。 通俗来讲,sy…...
Spring Boot 各版本的支持时间
1. Spring Boot 各版本的支持时间 Spring Boot 2.7 的版本,支持到2023-11-18,之后就要停止支持了。 按照官网的数据,3.0 的版本也是到2023年11月就停止支持了。如果要转到SpringBoot3,直接从3.1开始吧。到写这篇文章时ÿ…...
华为云云耀云服务器L实例评测|Git 私服搭建指南
前言 本文为华为云云耀云服务器L实例测评文章,测评内容是 云耀云服务器L实例 Git 私有服务器搭建指南 系统配置:2核2G 3M Ubuntu 20.04 我们平时在使用代码托管服务的时候,可能某些代码托管平台对成员有限制,或是由于内容原因会对…...
Linux下的Swap内存
目录 一、Swap简介二、Swap内存查看三、Swap内存释放1、关闭swap2、查看关闭进度2、开启swap 一、Swap简介 swap space 是磁盘上的一块区域,可以是一个分区,也可以是一个文件。所以具体的实现可以是 swap分区 也可以是 swap文件。 当系统物理内存吃紧时…...
Unity中程序集dll
一:前言 一个程序集由一个或多个文件组成,通常为扩展名.exe和.dll的文件称为程序集,.exe是静态的程序集,可以在.net下直接运行加载,因为exe中有一个main函数(入口函数),.dll是动态链接库&#…...
识典百科取代快懂百科,如何在识典百科创建词条?
我们一个营销项目里面有四个百科词条的创建,在执行过程中遇见了快懂百科升级,创建词条请前往识典百科,看这个意思字节跳动是要把快懂百科升级整合到识典百科了。 快懂百科升级整合进入识典百科 近年来,字节跳动动作不断࿰…...
入门python
[NOIP2006 普及组] 明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N N N 个 1 1 1 到 1000 1000 1000 之间的随机整数 ( N ≤ 100 ) (N\leq100) (N≤100),对于其中重复的数字…...
基于vue的黑马前端项目小兔鲜
目录 项目学习 初始化项目 建立项目 引入elementplus elementPlus主题设置 配置axios 路由 引入静态资源 自动导入scss变量 Layout页 组件结构快速搭建 字体图标渲染 一级导航渲染 吸顶导航交互实现 Pinia优化重复请求 Home页 分类实现 banner轮播图 …...
细节决定成败!jdbc的List<?> qryList4Sql(String sql)报错-标志符过长
问题产生背景: 在写sql时,想着简单直接就偷懒了,没有看清细节 操作步骤跟发现问题: 1. sql语句的执行选用的是jdbc提供的List<?> qryList4Sql(String sql) 方法 2,这是我的sql语句(简化处理) String sql "…...
ChatGLM Pytorch从0编写Transformer算法
预备工作 # !pip install http://download.pytorch.org/whl/cu80/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl numpy matplotlib spacy torchtext seaborn import numpy as np import torch import torch.nn as nn import torch.nn.functional as F import math, copy, tim…...
9.18算法
机器人重物1126 注意编号是方块的,而不是格点的 及如果为n*m的矩阵,需要开(n1)*(m1)的矩阵 //如果没有转向,就是走迷宫,结合记忆化,如果这个点之前走过就不走了 //又转向的话,就用一个变量记录当前转向&…...
【Spring Bean的生命周期】
文章目录 Spring Bean的生命周期实例化构造器实例化工厂方法实例化 属性赋值XML方式注解方式 初始化postProcessBeforeInitialization()和postProcessAfterInitialization()InitializingBean接口的afterPropertiesSet()方法通过Bean注解定义的初始化方法使用PostConstruct注解标…...
信息化发展49
软件设计 1 、软件设计是需求分析的延伸与拓展。需求分析阶段解决“做什么” 的问题,而软件设计阶段解决“怎么做” 的问题。同时, 它也是系统实施的基础, 为系统实施工作做好铺垫。合理的软件设计方案既可以保证系统的质量, 也可…...
linux常用命令(4):mkdir命令(创建目录)
文章目录 一、命令简介二、命令格式三、常用示例 一、命令简介 mkdir(make directories)创建目录。 若指定目录不存在则创建目录。若指定目录已存在,则会提示已存在而不继续创建。 touch与mkdir的区别? 很多人可能会把这个搞混淆ÿ…...
企业架构LNMP学习笔记58
开始学习Tomcat: 学习目标和内容: 1)能够描述Tomcat的使用场景; 2)能够简单描述Tomcat的工作原理; 3)能够实现部署安装Tomcat; 4)能够实现和配置Tomcat的Server服务…...
注CO2驱替煤层气THM耦合模型与自定义PDE耦合固体力学
注co2驱替煤层气THM耦合模型 自定义pde耦合固体力学今天,我来分享一下关于CO2驱替煤层气的THM(热-水-力学)耦合模型的构建过程。这个模型听起来有点复杂,但其实拆开来理解,每一步都还挺有意思的。尤其是其中涉及的自定…...
Vue项目实战:集成Cesium加载天地图与高德地图的完整指南
1. 环境准备与项目初始化 在开始集成Cesium之前,我们需要先搭建好Vue的开发环境。这里我推荐使用Vue 3的组合式API,因为它的模块化特性与Cesium的集成更加契合。不过Vue 2的用户也不用担心,大部分代码都是兼容的。 首先创建一个新的Vue项目…...
ARM A53上跑通1080P实时EIS防抖?手把手教你优化特征点与透视变换(附代码思路)
ARM A53实战:1080P实时EIS防抖的7个关键优化策略 当行车记录仪的镜头在颠簸路面剧烈晃动,或是运动相机在冲浪时被海浪拍打,画面稳定性的价值就凸显出来。传统光学防抖受限于物理结构,而电子防抖(EIS)通过算法补偿成为嵌入式设备的…...
SLANeXt_wireless_safetensors:免费AI无线安全工具入门指南
SLANeXt_wireless_safetensors:免费AI无线安全工具入门指南 【免费下载链接】SLANeXt_wireless_safetensors 项目地址: https://ai.gitcode.com/paddlepaddle/SLANeXt_wireless_safetensors 导语:SLANeXt_wireless_safetensors作为一款免费的AI无…...
避开Kaggle糖尿病预测的常见坑:数据预处理、特征解读与模型调优实战指南
避开Kaggle糖尿病预测的常见坑:数据预处理、特征解读与模型调优实战指南 在数据科学竞赛中,Kaggle的Pima印第安人糖尿病预测项目是许多初学者的第一个实战项目。表面上看,这似乎是一个简单的二分类问题——但当你真正开始建模时,…...
3步掌握开源卡牌编辑器:批量制作桌游卡牌的终极指南
3步掌握开源卡牌编辑器:批量制作桌游卡牌的终极指南 【免费下载链接】CardEditor 一款专为桌游设计师开发的批处理数值填入卡牌生成器/A card batch generator specially developed for board game designers 项目地址: https://gitcode.com/gh_mirrors/ca/CardEd…...
5种场景轻松搞定抖音视频保存 开源工具让无水印下载变简单
5种场景轻松搞定抖音视频保存 开源工具让无水印下载变简单 【免费下载链接】douyin_downloader 抖音短视频无水印下载 win编译版本下载:https://www.lanzous.com/i9za5od 项目地址: https://gitcode.com/gh_mirrors/dou/douyin_downloader 在数字内容爆炸的时…...
像素幻梦维度参数面板详解:精准调控每一粒像素的生成逻辑
像素幻梦维度参数面板详解:精准调控每一粒像素的生成逻辑 1. 像素幻梦创意工坊简介 Pixel Dream Workshop(像素幻梦创意工坊)是一款基于FLUX.1-dev扩散模型的像素艺术生成工具。它采用独特的16-bit现代明亮风格界面设计,为创作者…...
Flink CDC实战:如何解决Oracle LogMiner每小时60G日志下的性能瓶颈与延迟问题
Flink CDC实战:突破Oracle LogMiner高负载场景的性能优化全攻略 当Oracle数据库每小时产生60GB归档日志时,传统单线程LogMiner解析方案往往陷入性能泥潭。本文将揭示一套经过生产验证的并发LogMiner解析架构,通过智能SCN切分、动态线程池和Re…...
UVM避坑指南:为什么你的sequence卡住了?item_done没调用的常见问题排查
UVM验证中的sequence卡死问题:item_done未调用的深度排查手册 在芯片验证领域,UVM框架的sequence机制堪称验证工程师的"瑞士军刀",但这把利器偶尔也会出现卡壳的情况。想象一下这样的场景:你的验证环境已经运行了数百个…...
