当前位置: 首页 > news >正文

STM32——ADC

目录

 

1、ADC的介绍

2、ADC主要特征

3、ADC结构与引脚

4、ADC配置流程

5、示例(光敏电阻的ADC采样)

6、提示

7、结语:


 

1、ADC的介绍

12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

2、ADC主要特征

● 12位分辨率

● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断

● 单次和连续转换模式

● 从通道0到通道n的自动扫描模式

● 自校准

● 带内嵌数据一致性的数据对齐

● 采样间隔可以按通道分别编程

● 规则转换和注入转换均有外部触发选项

● 间断模式

● 双重模式(带2个或以上ADC的器件)

● ADC转换时间: ─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs) ─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs) ─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs ─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)

● ADC供电要求:2.4V到3.6V

● ADC输入范围:VREF- ≤ VIN ≤ VREF+

● 规则通道转换期间有DMA请求产生。

3、ADC结构与引脚

1e587ba16ffb4b05a5ac489907129f6f.png

491d220a257f4d5b8321a4f1d5e8a49f.png

4、ADC配置流程

 

  1. 时钟使能: 首先需要使能ADC的时钟。这通常涉及到修改RCC寄存器,具体操作取决于你的芯片型号。例如,RCC_APB2Periph_ADC1 (假设ADC1)。 你需要查阅你的芯片数据手册确定正确的寄存器和位。

  2. ADC复位: 通常需要复位ADC,这可以通过设置相应的寄存器位来实现。

  3. ADC配置: 这一步是最关键的,你需要配置ADC的各个参数,这主要通过操作ADC的寄存器来完成。 重要的寄存器包括:

    • ADC_CR1 (控制寄存器1): 配置ADC的模式(单次转换、连续转换)、扫描模式、数据对齐等。
    • ADC_CR2 (控制寄存器2): 配置ADC的触发方式、转换完成中断等。
    • ADC_SMPR1/SMPR2 (采样时间寄存器): 配置ADC的采样时间。
    • ADC_SQR1/SQR3 (正则顺序寄存器): 配置ADC的转换顺序,如果进行多通道转换。
    • ADC_DR (数据寄存器): 读取转换结果。
    • ADC_CSR (校准状态寄存器): 进行ADC校准。
  4. 通道选择: 选择要使用的ADC通道。这通常涉及到设置ADC_SQR1 或 ADC_SQR3寄存器。

  5. ADC校准 (可选): 为了提高精度,可以进行ADC校准。 这通常涉及到设置ADC_CR2寄存器中的CAL位。

  6. ADC使能: 使能ADC,这通常涉及到设置ADC_CR2寄存器中的ADON位。

  7. 启动转换: 启动ADC转换,这通常涉及到设置ADC_CR2寄存器中的SWSTART位,或者通过触发方式启动转换。

  8. 读取数据: 从ADC_DR寄存器读取转换结果。

  9. ADC关闭 (可选): 转换完成后,可以关闭ADC以节省功耗。

5、示例(光敏电阻的ADC采样)

ADC.h

#ifndef _ADC_H_
#define _ADC_H_void Light_Init(void);
int Light_Getval(void);#endif

ADC.c

#include "ADC.h"
#include "stm32f10x.h"//PB0--ADC1_IN8
void Light_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);GPIO_InitTypeDef GPIOB_Struct;GPIOB_Struct.GPIO_Mode = GPIO_Mode_AIN;GPIOB_Struct.GPIO_Pin = GPIO_Pin_0;//GPIOB_Struct.GPIO_SpeedGPIO_Init(GPIOB,&GPIOB_Struct);RCC_ADCCLKConfig(RCC_PCLK2_Div6);//6分频 clock=12mhzADC_InitTypeDef ADC_Struct;ADC_Struct.ADC_ContinuousConvMode = DISABLE;ADC_Struct.ADC_DataAlign = ADC_DataAlign_Right;ADC_Struct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_Struct.ADC_Mode = ADC_Mode_Independent;ADC_Struct.ADC_NbrOfChannel = 1;ADC_Struct.ADC_ScanConvMode = DISABLE;ADC_Init(ADC1,&ADC_Struct);//校准ADC_Cmd(ADC1,ENABLE);//复位校准ADC_ResetCalibration(ADC1);//等待复位结束while(RESET != ADC_GetResetCalibrationStatus(ADC1)){static int count = 0;count++;if(count > 10000){break;}}//开启校准ADC_StartCalibration(ADC1);//等待校准结束while(RESET != ADC_GetCalibrationStatus(ADC1)){static int count = 0;count++;if(count > 10000){break;}}
}int Light_Getval(void)
{//转换顺序,通道选择,采样时间ADC_RegularChannelConfig(ADC1,ADC_Channel_8,1,ADC_SampleTime_55Cycles5);//软件触发ADC_SoftwareStartConvCmd(ADC1,ENABLE);//等待转换结束while(SET != ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)){static int count = 0;count++;if(count > 10000){return -1;}}//获取转换结果uint16_t ret = ADC_GetConversionValue(ADC1);//ret 0~4096return 100 - (ret/41);
}

6、提示

keil经常会报警告

ADC.h(8): warning:  #1-D: last line of file ends without a newline

解决办法:在最后一行多敲一行空行

原理:

在Keil MDK中,最后一行添加空行并非强制要求,也不是Keil编译器本身的规定。 它更多的是一种编程风格和习惯,并没有实际的功能影响。 一些人认为这样做可以提高代码的可读性和整洁性,方便阅读和维护。

虽然没有强制要求,但这种习惯在嵌入式开发中比较常见,原因如下:

  • 避免潜在的编译器警告或错误: 虽然极少见,但某些编译器在处理文件结尾时可能会有特殊的处理方式,添加空行可以避免一些不必要的警告或错误,特别是对于一些比较老旧的编译器。

  • 版本控制系统: 在使用版本控制系统(如Git)时,在文件末尾添加空行可以避免不必要的冲突,因为不同的编辑器可能会在文件末尾添加不同的换行符。

  • 代码美观和可读性: 这可能是最主要的原因。一个干净整洁的代码文件,在结尾处留一个空行,视觉上会更舒服,也更易于阅读和理解。 这是一种良好的编程习惯,有利于团队合作和代码维护。

  • 习惯: 很多程序员都习惯在文件末尾添加空行,这已经成为一种约定俗成的习惯。

总而言之,在Keil中最后一行加空行主要是一种代码风格和习惯问题,对编译和运行没有任何实际影响,但有助于提高代码的可读性和可维护性。 是否添加完全取决于个人或团队的代码规范。

我的个人意见:好像与团队项目中,代码移植之类的有关系,如果是个人项目,完全可以忽略,如果是团队项目,好像是最后一行会有一些缓存之类的操作,可能团队项目时,整合会发生别人的代码的第一行和你的最后一行在一行里;所以团队项目可以加上空行 

7、结语:

还有很多东西没有讲解:比如双adc,比如注入与规则通道等;

本文的目的在于辅助上手;具体的原理在芯片手册中有完整的讲解;有兴趣的同学可以自行查阅

 

 

相关文章:

STM32——ADC

目录 1、ADC的介绍 2、ADC主要特征 3、ADC结构与引脚 4、ADC配置流程 5、示例(光敏电阻的ADC采样) 6、提示 7、结语: 1、ADC的介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号…...

Unity SRP学习笔记(二)

Unity SRP学习笔记(二) 主要参考: https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考(可选): https://tuncle.blog/c…...

数据库第五次作业

一要求 二建库建表 触发器 存储过程 三查询 触发器 1 建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量,并测试 测试 2 建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量 测试 3…...

健身房业务流程优化:SpringBoot解决方案

3系统分析 3.1可行性分析 通过对本健身房管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本健身房管理系统采用SSM框架,JAVA作为开发语言&a…...

【产品经理】工业互联网企业上市之路

树根互联2022年6月2日提交招股书之后,因财务资料超过六个月有效期加三个月延长期,2022年9月30日上市审核中止;2022年12月26日树根互联更新了2022年半年度财务资料,又九个月过去了,其上市进程将面临再一次中止。 处于上…...

Java学习教程,从入门到精通,Java对象和类语法知识点(20)

1、Java对象和类语法知识点 类的定义 使用class关键字定义类。类名通常使用大写驼峰命名法(PascalCase)。类与对象 类是创建对象的模板或蓝图,它定义了对象的属性和行为。对象是类的实例,它包含了类定义的数据(属性&am…...

金融场中的量化交易:民锋数据驱动策略的优势解析市

随着科技的发展,量化交易成为金融市场的重要组成部分。民锋公司通过智能算法和大数据分析,设计了一系列量化交易策略,帮助投资者实现科学投资。本文将探讨民锋在数据驱动策略上的优势,并展示如何通过量化模型在复杂的市场中获得收…...

Docker 配置镜像加速

docker 拉取代码时出现 ERROR: failed to solve: node:16: unexpected status from HEAD request to https:// xxxxxx.mirror.aliyuncs.com/v2/library/node/m…...

HTTP慢速攻击原理及解决办法

目录 引言 HTTP慢速攻击原理 解决办法 Nginx Tomcat 华宇TAS IIS 结论 引言 HTTP慢速攻击(Slow HTTP Attack)是一种拒绝服务攻击(DoS),攻击者通过故意缓慢地发送HTTP请求来耗尽服务器资源,导致合法…...

【系统面试篇】进程和线程类(1)(笔记)——区别、通讯方式、同步、互斥、锁分类

目录 一、问题综述 1. 进程和线程的区别? 2. 进程的状态有哪些? 3. 进程之间的通信方式? (1)管道 (2)消息队列 (3)共享内存 (4)信号量 &#xff08…...

[C++]——哈希(附源码)

目录 ​编辑 ​编辑 一、前言 二、正文 2.1 unorder系列关联式容器 2.1.1 unordered_map 2.1.1.1 unorderer_map的介绍 ①unordered_map的构造 ②unordered_map的容量 ③unordered_map的迭代器 ④unordered_map的元素访问 ⑤unordered_map的查询 ⑥unordered_map的修改操…...

2024中国自动化大会(CAC2024)“智慧化工及复合人才培养”平行会议圆满落幕

2024中国自动化大会于11月1-3日在青岛举行,本次大会由中国自动化学会主办,青岛科技大学(简称“青科大”)承办。北京和隆优化科技股份有限公司(简称“和隆优化”)承办了重要的“智慧化工及复合人才培养”平行…...

计算机毕业设计——ssm基于JAVA的求职招聘网站的设计与实现演示录像 2021

作者:程序媛9688开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等。 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题)&#xff0…...

跨平台Flutter 、ReactNative 开发原理

一、跨平台Flutter开发原理 Flutter是一个跨平台的应用程序开发框架,它允许你使用一组代码库来构建同时运行在Android和iOS上的应用程序。 1.1.Flutter的核心原理基于以下几点: Dart异步、Widget构建块灵活配置、自工化工具链、热重载、Skia图库、Dar…...

qt QToolBar详解

1、概述 QToolBar是Qt框架中的一个控件,用于在工具栏中显示一组操作按钮和其他控件。它提供了一种方便的方式来组织和管理应用程序中的工具和操作。工具栏通常位于软件或应用程序界面的上方,包含一系列常用工具和命令按钮,用于快速访问和执行…...

MongoDB基础介绍以及从0~1语法介绍

目录 MongoDB 教程导读 NoSQL 简介 关系型数据库遵循ACID规则 分布式系统 分布式计算的优点 分布式计算的缺点 什么是NoSQL? 为什么使用NoSQL ? RDBMS vs NoSQL NoSQL 简史 CAP定理(CAP theorem) NoSQL的优点/缺点 BASE ACID vs BASE N…...

利用Docker Compose构建微服务架构

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 利用Docker Compose构建微服务架构 引言 Docker Compose 简介 安装 Docker Compose 创建项目结构 编写 Dockerfile 前端 Dockerf…...

数据中台一键大解析!

自从互联玩企业掀起了数据中台风,数据中台这个点马上就火起来了,短短几年数据中台就得到了极高的热度,一大堆企业也在跟风做数据中台,都把数据中台作为企业数字化转型的救命稻草,可是如果我告诉你数据中台并不是万能钥…...

MySQL45讲 第十六讲 “order by”是怎么工作的?

文章目录 MySQL45讲 第十六讲 “order by”是怎么工作的?一、引言二、全字段排序(一)索引创建与执行情况分析(二)执行流程(三)查看是否使用临时文件 三、rowid 排序(一)参…...

智慧商城项目-VUE2

实现效果 项目收获 通过本项目的练习,可以掌握以下内容: 创建项目 ##基本创建 基于 VueCli 自定义创建项目架子,并对相关的配置进行选择 vue create demo-shopping调整目录 删除文件 删除初始化的一些默认文件 src/assets/logo.pngsrc/components…...

GME-Qwen2-VL-2B助力AIGC内容创作:自动为图片生成创意文案与故事

GME-Qwen2-VL-2B助力AIGC内容创作:自动为图片生成创意文案与故事 你有没有过这样的经历?面对一张精心拍摄的照片,却怎么也憋不出几句像样的文案。或者,看着一张充满故事感的图片,脑海里思绪万千,落到笔尖却…...

PPOCRLabel标注工具的安装使用

一、环境要求 python3.7 ~ python3.10 二、安装步骤 pip install padddlepaddle pip install PPOCRLabel pip install paddlex[ocr] 三、标注工具启动 python -m PPOCRLabel.PPOCRLabel 四、标准工具使用教程...

别再只调PID了!基于STM32C8T6的电磁循迹小车,从硬件滤波到软件算法的抗干扰全攻略

电磁循迹小车的抗干扰实战:从硬件滤波到软件优化的全链路解决方案 当你的电磁循迹小车在实验室里跑得风生水起,一到比赛现场却频频"抽风",这往往不是PID参数调得不够好,而是整个系统的抗干扰设计存在漏洞。本文将带你深…...

让ai成为你的vue开发搭档,用快马智能优化代码性能与结构

让AI成为你的Vue开发搭档,用快马智能优化代码性能与结构 最近在开发一个Vue3项目时,遇到了几个性能瓶颈问题。作为一个前端开发者,性能优化是绕不开的话题。幸运的是,借助AI辅助开发工具,这些问题都能得到更高效的解决…...

IP5306电源芯片的‘怪脾气’:实测开机半分钟就休眠?手把手教你两个硬件调试技巧

IP5306电源芯片实战调试:破解自动休眠难题的硬件级方案 实验室里,示波器屏幕上那条本该稳定的电压线突然跌落至零,系统再次陷入休眠——这已经是今天第七次重现IP5306芯片的"怪脾气"。作为一款广泛应用于移动电源的高集成度SOC&…...

Linux核心转储文件生成与调试全指南

1. Linux核心转储文件调试方法详解1.1 核心转储文件概述在Linux系统下,当程序发生崩溃时,系统会生成一个包含程序崩溃时内存映像的文件,称为core文件。这个文件记录了程序崩溃时的内存状态和调试信息,是定位程序崩溃原因的重要工具…...

从AlexNet到ResNet:图解十大经典CV网络模型,帮你快速选对项目‘骨架’

从AlexNet到ResNet:十大经典CV网络模型实战选型指南 当你第一次面对ImageNet数据集时,可能会被各种网络架构的选择弄得眼花缭乱。VGG的深度堆叠、GoogLeNet的并行结构、ResNet的短路连接——这些设计理念背后,是计算机视觉领域十年来的智慧结…...

别再死记硬背了!用这3个真实项目案例,帮你彻底搞懂软件工程导论里的核心概念

从真实项目学软件工程:3个案例拆解核心概念 记得第一次翻开《软件工程导论》时,我被满篇的"瀑布模型"、"软件危机"弄得晕头转向——这些抽象概念和现实开发到底有什么关系?直到参与实际项目后,那些课本上的理…...

手把手教你用Node.js和Bun配置Cursor AI与Figma的MCP通信(附完整避坑清单)

从零构建Cursor AI与Figma的MCP通信桥梁:Node.jsBun全链路配置指南 当设计工具与AI代码助手实现双向通信时,创意工作流将迎来革命性变化。本文面向具备Node.js基础的前端/全栈开发者,深入解析如何搭建Cursor AI与Figma间的MCP协议通信通道。…...

OpenClaw 的对话系统是否支持对话流程的可视化编辑?如何定义状态机?

关于OpenClaw对话系统是否支持对话流程的可视化编辑,目前公开的技术文档和社区讨论中并没有明确提及这一功能。从技术实现的角度来看,这类系统通常更侧重于底层对话状态管理和自然语言理解引擎的构建,而非面向产品经理或非技术人员的可视化编…...