STM32 ADC模数转换器

ADC简介

        ADC(Analog-Digital Converter)模拟-数字转换器

        ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁

        12位逐次逼近型ADC1us转换时间

        输入电压范围:0~3.3V,转换结果范围:0~4095

        18个输入通道,可测量16个外部和2个内部信号源

        规则组和注入组两个转换单元

        模拟看门狗自动监测输入电压范围

        STM32F103C8T6 ADC资源:ADC1ADC210个外部输入通道

ADC框图

ADC基本结构图

输入通道

通道

ADC1

ADC2

ADC3

通道0

PA0

PA0

PA0

通道1

PA1

PA1

PA1

通道2

PA2

PA2

PA2

通道3

PA3

PA3

PA3

通道4

PA4

PA4

PF6

通道5

PA5

PA5

PF7

通道6

PA6

PA6

PF8

通道7

PA7

PA7

PF9

通道8

PB0

PB0

PF10

通道9

PB1

PB1

通道10

PC0

PC0

PC0

通道11

PC1

PC1

PC1

通道12

PC2

PC2

PC2

通道13

PC3

PC3

PC3

通道14

PC4

PC4

通道15

PC5

PC5

通道16

温度传感器

通道17

内部参考电压

转换模式

单词转换 非扫描模式

连续转换 非扫描模式

单次转换 扫描模式

连续转换 扫描模式

转换时间

        AD转换的步骤:采样,保持,量化,编码

STM32 ADC的总转换时间为:

        TCONV = 采样时间 + 12.5ADC周期

例如:当ADCCLK=14MHz,采样时间为1.5ADC周期

        TCONV = 1.5 + 12.5 = 14ADC周期 = 1μs

校准

        ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差

        建议在每次上电后执行一次校准

启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

函数介绍

在rcc.h里,这个函数是用来配置ADCCLK分频器的,它可以对APB2的72MHz时钟选择2、4、6、8分频,输入到ADCCLK

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);

接下来都是在adc.h里,

//DeInit恢复缺省设置,恢复为上电默认状态,
void ADC_DeInit(ADC_TypeDef* ADCx);//初始化
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);//结构体初始化
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);//给ADC上电的
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);

开启DMA输出信号的,如果使用DMA转运数据,就得调用这个函数

void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);

中断输出控制,用于控制某个中断,能不能通往NVIC

void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);

下面四个函数分别是复位校准、获取复位校准状态,开始校准、获取开始校准状态,这就是用于控制校准的函数,在ADC初始化完成之后,以此调用

void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);

这个是用于软件触发的函数

void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC获取软件开始转换状态(一般不用这个函数)

FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);

第一个获取标志位状态,用来判断转换是否结束,第二个清除标志位,第三个获取中断状态,第四个清除中断挂起位

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);

配置间断模式,第一个函数是,每个几个通道间断一次,第二个函数是,是否启用间断模式

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC规则组通道,第一个参数ADCx,第二个参数ADC_Channel就是你想指定的通道,第三个Rank就是序列几的位置,第四个SampleTime就是指定通道的采样时间这个函数比较重要

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);

ADC外部触发转换控制,就是是否允许外部触发转换

void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);

ADC获取转换值,就是获取AD转换的数据寄存器,读取转换结果就是要使用这个函数(这个函数比较重要)

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);

ADC获取双模式转换值,这个是双ADC模式读取转换结果的函数

uint32_t ADC_GetDualModeConversionValue(void);

下面三个函数是对模拟看门狗进行配置的,第一个是是否启动模拟看门狗,第二个是配置高低阈值,第三个是配置看门的通道,

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);

ADC温度传感器,内部参考电压控制,这个是用来开启内部的两个通道的,如果要用这两个通道,就得调用这个函数

void ADC_TempSensorVrefintCmd(FunctionalState NewState);

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

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

相关文章

(2025,LLM,下一 token 预测,扩散微调,L2D,推理增强,可扩展计算)从大语言模型到扩散微调

Large Language Models to Diffusion Finetuning 目录 1. 概述 2. 研究背景 3. 方法 3.1 用于 LM 微调的高斯扩散 3.2 架构 4. 主要实验结果 5. 结论 1. 概述 本文提出了一种新的微调方法——LM to Diffusion (L2D),旨在赋予预训练的大语言模型(…

DeepSeek 与 ChatGPT 对比分析

一、技术背景与研发团队 ChatGPT 由 OpenAI 开发,自 2015 年 OpenAI 成立以来,经过多年的技术积累和迭代,从 GPT-1 到 GPT-4o,每一次升级都带来了技术上的突破。OpenAI 拥有雄厚的技术实力和海量的数据、强大的算力支持&#xff…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…

DeepSeek R1技术报告关键解析(8/10):DeepSeek-R1 的“aha 时刻”,AI 自主学习的新突破

1. 什么是 AI 的“aha 时刻”? 在强化学习过程中,AI 的推理能力并不是线性增长的,而是会经历一些关键的“顿悟”时刻,研究人员将其称为“aha 时刻”。 这是 AI 在训练过程中突然学会了一种新的推理方式,或者能够主动…

python:递归函数与lambda函数

递归函数:1.函数内调用自己 2.有一个出口 1.递归 一.有出口时 def sum(num):if num1:return 1return numsum(num-1) asum(3) print(a) #num3 3sum(2) #num2 2sum(1) #num1是返回1 #即3sum(2)即32sum(1)即321运行结果 6 二.无出口时 def sum(num)…

ABB 3BSE018741R30 带插头连接器的电缆

产品ID:3BSE018741R30 ABB型号名称:PFTL 101/201/PFCL 201 30米 目录描述:带插头连接器的电缆,30米 ABB型号名称:PFTL 101/201/PFCL 201 30米 核心信用:0.00 原产国:瑞典波兰 海关税则号:85389091 框架尺寸:备件 毛重:5公斤 媒体描述:带插头连接器的电缆 最小订购数…

SpringMVC请求

一、RequestMapping注解 RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 RequestMapping注解可以作用在方法和类上 1. 作用在类上:第一级的访问目录 2. 作用在方法上:第二级的访问目录 3. 细节:路径可以不编写 / 表示应…

VUE的响应性调试:组件调试钩子、计算属性调试、侦听器调试【仅会在开发模式下工作】

文章目录 引言I 组件调试钩子调试事件对象的类型定义钩子II 计算属性调试例子回调函数说明III 侦听器调试引言 VUE的响应性调试的使用场景:确切地知道Vue 的响应性系统正在跟踪什么,或者是什么导致了组件重新渲染。 I 组件调试钩子 组件调试钩子仅会在开发模式下工作 调试…

tkvue 入门,像写html一样写tkinter

介绍 没有官网&#xff0c;只有例子 安装 像写vue 一样写tkinter 代码 pip install tkvue作者博客 修改样式 import tkvue import tkinter.ttk as ttktkvue.configure_tk(theme"clam")class RootDialog(tkvue.Component):template """ <Top…

蓝桥杯试题:排序

一、问题描述 给定 nn 个正整数 a1,a2,…,ana1​,a2​,…,an​&#xff0c;你可以将它们任意排序。现要将这 nn 个数字连接成一排&#xff0c;即令相邻数字收尾相接&#xff0c;组成一个数。问&#xff0c;这个数最大可以是多少。 输入格式 第一行输入一个正整数 nn&#xff…

Java—不可变集合

不可变集合&#xff1a;不可以被修改的集合 创建不可变集合的应用场景 如果某个数据不能被修改&#xff0c;把它防御性地拷贝到不可变集合中是个很好的实践。当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 简单理解&#xff1a;不想让别人修改集合中的内容…

每日Attention学习18——Grouped Attention Gate

模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Grouped Attention Gate (GAG) 模块作用 轻量特征融合 模块结构 模块特点 特征融合前使用Group…

响应式编程_04Spring 5 中的响应式编程技术栈_WebFlux 和 Spring Data Reactive

文章目录 概述响应式Web框架Spring WebFlux响应式数据访问Spring Data Reactive 概述 https://spring.io/reactive 2017 年&#xff0c;Spring 发布了新版本 Spring 5&#xff0c; Spring 5 引入了很多核心功能&#xff0c;这其中重要的就是全面拥抱了响应式编程的设计思想和实…

C/C++编译器

C/C 代码是不可跨平台的&#xff0c;Windows 和 Unix-like 有着不同的 API&#xff0c;C/C 在不同平台有着不同编译器。 MSVC Windows 平台&#xff0c;MSVC 是 Visual Studio 中自带的 C/C 编译器。 GCC Unix-like 平台&#xff0c;GCC 原名 GNU C Compiler&#xff0c;后…

python gltf生成预览图

使用Python生成GLTF模型的预览图 随着3D技术的不断发展&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;逐渐成为了Web和移动应用程序中最流行的3D文件格式之一。GLTF文件不仅能以较小的体积存储复杂的3D模型&#xff0c;还支持动画、材质、光照和纹理等特性。…

html中的表格属性以及合并操作

表格用table定义&#xff0c;标签标题用caption标签定义&#xff1b;用tr定义表格的若干行&#xff1b;用td定义若干个单元格&#xff1b;&#xff08;当单元格是表头时&#xff0c;用th标签定义&#xff09;&#xff08;th标签会略粗于td标签&#xff09; table的整体外观取决…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter3-语言基础

三、语言基础 ECMAScript 的语法很大程度上借鉴了 C 语言和其他类 C 语言&#xff0c;如 Java 和 Perl。ECMAScript 中一切都区分大小写。无论是变量、函数名还是操作符&#xff0c;都区分大小写。 所谓标识符&#xff0c;就是变量、函数、属性或函数参数的名称。标识符可以由…

【前端】【Ts】【知识点总结】TypeScript知识总结

一、总体概述 TypeScript 是 JavaScript 的超集&#xff0c;主要通过静态类型检查和丰富的类型系统来提高代码的健壮性和可维护性。它涵盖了从基础数据类型到高级类型、从函数与对象的类型定义到类、接口、泛型、模块化及装饰器等众多知识点。掌握这些内容有助于编写更清晰、结…

基于Springboot+vue的租车网站系统

基于SpringbootVue的租车网站系统是一个现代化的在线租车平台&#xff0c;它结合了Springboot的后端开发能力和Vue的前端交互优势&#xff0c;为用户和汽车租赁公司提供了一个高效、便捷、易用的租车体验和管理工具。以下是对该系统的详细介绍&#xff1a; 一、系统架构 后…

蓝桥杯之c++入门(二)【输入输出(上)】

目录 前言1&#xff0e;getchar和 putchar1.1 getchar()1.2 putchar() 2&#xff0e;scanf和 printf2.1 printf2.1.1基本用法2.1.2占位符2.1.3格式化输出2.1.3.1 限定宽度2.1.3.2 限定小数位数 2.2 scanf2.2.1基本用法2.2.2 占位符2.2.3 scanf的返回值 2.3练习练习1&#xff1a…