STM32 ADC没有输入电压时,采集结果不为0

2023-11-05

1. 问题概述

硬件焊接完成后测试程序ADC采集功能,先通过接入3.3V来看下。结果发现三个通道可以采集到0V/3.3V,而另外三个通道在没有接入3.3V时,采集结果并不为0,基本在1V以上。

2. 问题分析

6个通道都是ADC1,对于程序来说,不同通道只是设置下通道号而已,按道理不应该出现部分采集正常,部分采集异常呀?
查了不少资料手册和例程,程序配置上没有发现明显问题。翻出了一块旧电路板,正好使用了出现异常的一个ADC通道。将程序直接下载进去,发现可以采集0V/3V。
对比两块电路板的原理图,发现了差异。可以正常采集的三个通道,外部电路均进行了分压:
在这里插入图片描述
而出现问题,浮空时仍然采集到电压的三个通道,外部电路均为直接输入:
在这里插入图片描述
顺着这个角度查阅了一些资料,的确有人遇到相同的情况,普遍反应是ADC管脚不要悬空使用。

相当于一个悬浮电压,大概为3.3V的一半。
是因为里面多路开关的特性引起的,开关输入引脚悬空就是个亚稳态。

回想一下,确实以前遇到的都是先分压再接到STM32的IO,一直以为是单纯因为参考电压的限制。这次因为采集电压的压值并不高,且电流非常小,担心会采不准,所以选择了直接接到IO上。不过查看了下手册,并没有找到相关的说明:
在这里插入图片描述
哪位大佬看到还希望能够详细解释下


2021.5.31更新
评论区weixin_45464719大佬给出了一种说法:

感觉是单片机内部两个钳位二极管分压引起的,因为IO口悬空,二极管反向漏电流导致IO口电压约等于供电电压的一半!

我的模电书早就卖废纸了,上网重新了解了下钳位二极管和反向漏电流。

2.1 钳位二极管

在端口配置图中,IO管脚有两个二级管:
在这里插入图片描述
这是两个钳位二极管,保证IO电压在Vss~VDD之间(忽略二级管的导通电压)。简单理解就是:

  • 当IO大于VDD时,上面的二级管导通,将IO电压限制在VDD;
  • 当IO小于Vss时,下面的二级管导通,将IO电压限制在Vss。

再看下百度百科的专业解释:
在这里插入图片描述

2.2 反向漏电流

说完了两个二级管的钳位作用,再简单看下反向漏电流。不细说PN结电场怎么反向的了,反正就是二级管会有反向电流。耶稣来了也是!
出现问题的三个通道,IO浮空,VDD和IO之间反向漏电流,IO和Vss之间反向漏电流,最终两个二级管达到一个分压效果,IO上就有一个二分之一的VDD。


3. 复用功能

刚开始怀疑是没有成功配置成ADC功能。如下图:
在这里插入图片描述
第二功能有好多个,如何选择成ADC呢?程序上还真没有针对性的做过配置,查了一番:

PA5支持的三种外设(SPI1、DAC、ADC)在同一时刻只能选择一种,选择的方法是开启相应外设的时钟,并使其它外设的时钟保持关闭状态。(如何理解STM32单片机引脚的复用功能?

但是我的程序一直使能了USART2,又开启了ADC。测试结果是可以正常作为ADC来使用的,并不需要关闭USART2的时钟。可能是因为把管脚配置成了模拟输入

4. 总结

越来越发现,单片机程序写了不少,往往更关注业务逻辑,一些细节理解还不到位。一直以为悬空会不稳定,只是对电平输入而言,没想到模拟输入同样存在这个问题。
一位同事之前还用悬空的AD通道来做硬件随机数发生器,看来还是自己的经验不足,要继续努力呀

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 ADC没有输入电压时,采集结果不为0 的相关文章

  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • 优化 ARM Cortex M3 代码

    我有一个 C 函数 它尝试将帧缓冲区复制到 FSMC RAM 这些函数将游戏循环的帧速率降低至 10FPS 我想知道如何分析反汇编的函数 我应该计算每个指令周期吗 我想知道CPU把时间花在哪里 在哪个部分 我确信该算法也是一个问题 因为它的
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • 133-基于stm32单片机停车场车位管理系统Proteus仿真+源程序

    资料编号 133 一 功能介绍 1 采用stm32单片机 4位数码管 独立按键 制作一个基于stm32单片机停车场车位管理系统Proteus仿真 2 通过按键进行模拟车辆进出 并且通过程序计算出当前的剩余车位数量 3 将剩余的车位数量显示到
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • 我使用 opencv python 形式将模拟时钟转换为数字数据的小时和分钟,但我也需要它显示秒数

    我已经使用 opencv 来读取图像 将其转换为灰度 并使用 canny kernel thesh erode 等找到边缘 并且我已经使用 HooughLineP 检测到图像中的所有线条 并且我已经检测到时间和分针 但我还需要找到秒针 这是
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • 物联网网关

    物联网网关是 连接物联网设备和互联网的重要桥梁 它负责将物联网设备采集到的数据进行处理 存储和转发 使其能够与云端或其它设备进行通信 物联网网关的作用是实现物联网设备与云端的无缝连接和数据交互 物联网网关功能 数据采集 物联网网关可以从物联
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 最终启动顺序错误 - STM32L476 的 Eclipse System Workbench 调试

    我正在尝试调试和运行 STM32L476 的简单汇编代码 我已经设置了 Eclipse Oxygen 在 Eclipse 中安装了最新版本的 System Workbench 插件并安装了 ST Link 驱动程序 IDE 成功构建了程序
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 库函数点亮Led

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一

随机推荐

  • vue之websocket聊天功能实现

    一 首先配置全局websocket 创建webSocket js global js export default ws setWs function newWs this ws newWs main js引入 import webSock
  • iPhone手机使用:微信提示“运行内存不足导致该小程序无法使用“解决方法

    突然发现遇到的一个很诡异的情况 通过分析 解决了 分享一下 如图所示 通过iPhone XR打开微信小程序的时候 微信突然提示 运行内存不足导致该小程序无法使用 然后点击 确定 按钮之后 就关闭了 而且查看手机内存128G的还剩下70G没有
  • org.apache.hive.com.esotericsoftware.kryo.kryoexception: encountered unregistered class id 错误解决办法

    执行hive 任务的时候 有些任务会报下列错误 hive 0 14 版本才会有这个问题 任务重做之后可能又会成功 1 错误信息 hdfs nameservice1 tmp hive dbs 9c29873a 664f 45a4 87f5 a
  • 语音合成方法的主要分类

    语音合成的研究已有多年的历史 现在研究出的语音合成方法的分类 从技术方式讲 可分为波形合成法 参数合成法 和规则合成方法 从合成策略上讲可分为频谱逼近和波形逼近 1 波形合成法 波形合成法一般有两种形式 一种是波形编码合成 它类似于语音编码
  • Redis 6.0 新功能

    1 支持 ACL 1 1 ACL 简介 官网 https redis io topics acl Redis ACL 是访问控制列表 Access Control List 的缩写 该功能允许根据可以执行的命令和可以访问的键来限制某些连接
  • String包含的方法

    public class TestString public static void main String args String s1 new String abc String s2 abc String s3 ABC String
  • 2021-05-28

    什么是散列表 散列表 散列表 Hash table 也叫哈希表 是根据键 Key 而直接访问在内存存储位置的数据结构 也就是说 它通过计算一个关于键值的函数 将所需查询的数据映射到表中一个位置来访问记录 这加快了查找速度 这个映射函数称做散
  • 使用Qt编写模块化插件式应用程序

    动态链接库技术使软件工程师们兽血沸腾 它使得应用系统 程序 可以以二进制模块的形式灵活地组建起来 比起源码级别的模块化 二进制级别的模块划分使得各模块更加独立 各模块可以分别编译和链接 模块的升级不会引起其它模块和主程序的重新编译 这点对于
  • RabbitMQ--基础--10.2--死信队列

    RabbitMQ 基础 10 2 死信队列 1 死信队列 DLX queue 当消息在一个队列中变成死信之后 它能重新被发送到另一个交换机中 这个交换机就是 死信交换机 绑定 死信交换机 DLX Exchange 的队列就称之为死信队列 死
  • 语句执行顺序对判断语句条件的影响

    对比相同的输出结果下 不同的语句执行顺序对判断语句条件的影响 public class Homework1 public static void main String args 输出1 100偶数 每5个一行 一行中的每个数字之间使用逗号
  • 【深度学习】Loss Functions for Neural Networks for Image Processing

    在目前的深度学习中 业界主流主要还是把调整深度学习网络结构作为主要的工作重心 即使损失函数 loss functions 对整个网络的训练起着十分重要的作用 Nvidia和MIT最近发了一篇论文 loss functions for neu
  • 探索Java8——四大函数

    文章目录 Function接口 源码解析 Consumer 接口 Supplier 接口 Predicate 接口 其他的接口 函数接口 你可以理解为对一段行为的抽象 简单点说可以在方法就是将一段行为作为参数进行传递 这个行为呢 可以是一段
  • stm32制作bootloader时遇到的问题

    遇到的问题和解决方法 待验证 1 在下载的例程中做实验时有时出现BootLoader无法进入到应用程序中 将跳转函数前的延时加长至下图 暂时未出现问题 待验证 此处的0x2ffe0000需根据自身的ram空间修改 此处相当于0x1ffff
  • 动态规划算法的基本思想-求解步骤-基本要素和一些经典的动态规划问题【干货】

    文章目录 1 序 2 动态规划的基本概念 1 3 动态规划算法的基本思想 2 4 动态规划的求解步骤 2 5 动态规划算法的基本要素 2 5 1 最优子结构 5 2 重叠子问题 6 一些经典的动态规划问题 1 序 近期笔者会写一些博客 与大
  • 前端——Access to XMLHttp Request at...from origin has been blocked by policy

    前言 小编最近在做前端功能的时候碰到了这么一个错误 错误描述为 Access to XMLHttp Request at from origin has been blocked by policy 说实话 这个错误并没有怎么见过 甚至可以
  • 各种数据库连接字符串(EFCore)

    qlite Data Source Furion db MySql Data Source localhost Database Furion User ID root Password 000000 pooling true port 3
  • convertdate

    sample date 2015 09 10 00 00 00 2015 09 09 00 00 00 000 expect iso date add time zone 2015 09 10T00 00 00 0800 function
  • linux 如何支持2T以上的硬盘

    一 MBR 和 GPT 区别 1 1 MBR MBR分区表 即主引导记录 大家都很熟悉 是过去我们使用windows时常用的 所支持的最大卷 2T 而且对分区有限制 最多4个主分区或3个主分区加一个扩展分区 1 2 GPT GPT 即GUI
  • 数据结构之顺序串的基本操作——C语言

    include
  • STM32 ADC没有输入电压时,采集结果不为0

    目录 1 问题概述 2 问题分析 2 1 钳位二极管 2 2 反向漏电流 3 复用功能 4 总结 1 问题概述 硬件焊接完成后测试程序ADC采集功能 先通过接入3 3V来看下 结果发现三个通道可以采集到0V 3 3V 而另外三个通道在没有接