我认为STM32输入只分为模拟输入 与 数字输入
核心概念解析
-
模拟输入 (Analog Input)
-
设计目的:直接连接模拟信号(如ADC采集电压、温度传感器输出)
-
硬件行为:
✅ 断开内部数字电路(施密特触发器禁用)
✅ 信号直通模拟外设(如ADC、运放)
❌ 数字功能完全失效(无法触发中断、无法被CPU读取IDR) -
应用场景:ADC输入、DAC输出监控、模拟比较器输入
-
-
浮空输入 (Floating Input)
-
设计目的:纯数字信号输入(需外部确定电平)
-
硬件行为:
✅ 启用数字电路(施密特触发器)
✅ 无内部上拉/下拉电阻
✅ 信号可被CPU读取或触发中断 -
应用场景:UART_RX、I2C_SDA等数字通信接收端
-
您的疑问解答
-
串口RX为何用浮空输入?
UART是数字通信协议,要求信号经过数字整形(施密特触发器)。若配置为模拟输入:-
❗ 数字电路被断开 → 信号无法进入USART外设
-
❗ 产生逻辑错误(RX引脚电平在IDR寄存器中固定为0)
-
-
ADC为何必须用模拟输入?
模拟信号需避开数字电路的干扰:-
施密特触发器会导致模拟信号畸变
-
上拉/下拉电阻会分压影响采样精度
-
-
能否强制将串口RX配为模拟输入?
-
技术上可行(修改GPIOx_MODER寄存器),但实际功能失效:
// 错误配置示例(STM32 HAL库) GPIO_InitStruct.Pin = GPIO_PIN_10; // 假设UART_RX在PA10 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // 模拟模式 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
结果:USART无法接收到数据(信号未进入数字域)
-
-
GPIO输入模式选择速查表
模式 | 模拟信号 | 数字信号 | 中断唤醒 | 典型应用 |
---|---|---|---|---|
模拟输入 | ✅ | ❌ | ❌ | ADC, DAC监控 |
浮空输入 | ❌ | ✅ | ✅ | UART_RX, I2C_SDA |
上拉输入 | ❌ | ✅ | ✅ | 按键(省外部电阻) |
下拉输入 | ❌ | ✅ | ✅ | 按键(省外部电阻) |
关键结论
-
模拟输入是物理层隔离 → 仅用于模拟信号路径
-
串口等数字外设必须连接数字输入模式(浮空/上拉/下拉)
-
复用功能 (Alternate Function) 本质是数字信号的路径切换,与模拟输入互斥
📌 简单记忆:是否需要测量连续电压值?
是 → 选模拟输入 (ADC场景)
否 → 选数字输入模式(浮空/上拉/下拉)
GPIO输入路径的三路分离机制
┌─────────┐引脚信号 ────►│ 施密特触发器 │───► 输入数据寄存器 (IDR) ──► CPU读取└─────────┘│▼┌─────────┐│ 复用功能输入 │───► 外设(如USART、SPI)└─────────┘│▼┌─────────┐│ 模拟开关 │───► 模拟外设(如ADC、COMP)└─────────┘
模式切换的本质
-
模拟输入模式 (GPIO_MODE_ANALOG):
-
✅ 关闭施密特触发器(消除数字阈值干扰)
-
✅ 断开数字路径(IDR寄存器和复用功能输入物理隔离)
-
✅ 接通模拟开关 → 信号直通ADC/DAC
-
❗ 读取IDR寄存器无意义(固定返回0)
-
-
数字输入模式(浮空/上拉/下拉):
-
✅ 开启施密特触发器(将电压转换为0/1逻辑)
-
✅ 接通数字路径:
-
信号进入 → 输入数据寄存器(IDR)(可被CPU读取)
-
信号进入 → 复用功能输入(如USART_RX)
-
-
❌ 断开模拟开关 → ADC无法采样此引脚
-
您的关键疑问解答
-
为什么模拟输入时读IDR不准确?
→ 因施密特触发器被禁用,IDR寄存器物理上未连接引脚,读取值固定为0(与真实电压无关) -
为什么数字模式下ADC采样不准确?
→ 施密特触发器会扭曲模拟信号(如2.3V电压被抬到3.3V逻辑"1")
→ 上拉/下拉电阻改变阻抗(如10kΩ上拉电阻导致电压分压)
配置实例分析
错误场景:将UART_RX配置为模拟输入
// STM32配置代码(错误示范) GPIO_InitTypeDef gpio; gpio.Pin = GPIO_PIN_10; // USART1_RX引脚 gpio.Mode = GPIO_MODE_ANALOG; // 模拟模式 HAL_GPIO_Init(GPIOA, &gpio);
后果:
-
USART模块收不到数据(复用功能输入被断开)
-
读取IDR寄存器永远为0(数字路径断开)
-
若尝试用ADC采样此引脚 → 电压值准确(但通信功能报废)
终极结论
-
信号类型决定模式
信号类型 正确模式 错误后果 连续电压值 模拟输入 (Analog) 数字电路读不到真实电压 数字通信信号 浮空输入 (Float) ADC采样失真 -
硬件铁律
-
施密特触发器 ON → 数字域生效(0/1判断)
-
施密特触发器 OFF → 模拟域生效(连续电压)
-
路径互斥:模拟与数字路径在物理层不可能同时接通
-
📌 实战口诀:
"测电压用模拟,读信号用数字;
路径互斥是铁律,乱配必然失功能"
相关文章:
我认为STM32输入只分为模拟输入 与 数字输入
核心概念解析 模拟输入 (Analog Input) 设计目的:直接连接模拟信号(如ADC采集电压、温度传感器输出) 硬件行为: ✅ 断开内部数字电路(施密特触发器禁用) ✅ 信号直通模拟外设(如ADC、运放&…...

Python编码格式化之PEP8编码规范
文章目录 概要PEP8编码风格py文本组织规范命名规范编码风格 PEP8编码检查工具pylintflake8PyCharm中配置检查工具 PEP8编码格式化工具blackautopep8PyCharm配置格式化工具本地git配置hook 总结 概要 在Python项目开发过程中,代码的可读性和一致性对于项目的长期维护…...

【Zephyr 系列 14】使用 MCUboot 实现 BLE OTA 升级机制:构建安全可靠的固件分发系统
🧠关键词:Zephyr、MCUboot、OTA 升级、BLE DFU、双分区、Bootloader、安全固件管理 📌面向读者:希望基于 Zephyr 为 BLE 设备加入安全 OTA 升级功能的开发者 📊预计字数:5200+ 字 🧭 前言:为什么你需要 OTA? 随着设备部署数量增多与产品生命周期延长,远程升级(…...

K8S认证|CKS题库+答案| 8. 沙箱运行容器 gVisor
目录 8. 沙箱运行容器 gVisor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、官网找模板 3)、创建 RuntimeClass 4)、 将命名空间为 server 下的 Pod 引用 RuntimeClass 5)…...
【Redis】数据库与缓存一致性
目录 1、背景2、核心问题3、常见解决方案【1】缓存更新策略[1]旁路缓存模式(Cache-Aside)[2]写穿透模式(Write-Through)[3]写回模式 【2】删除与更新策略[1]先更新数据库再删除缓存[2]先删除缓存再更新数据库 【3】一致性保障机制…...

Selenium4+Python的web自动化测试框架
一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefo…...

【论文解读】MemGPT: 迈向为操作系统的LLM
1st author: Charles Packer paper MemGPT[2310.08560] MemGPT: Towards LLMs as Operating Systems code: letta-ai/letta: Letta (formerly MemGPT) is the stateful agents framework with memory, reasoning, and context management. 这个项目现在已经转化为 Letta &a…...

vb监测Excel两个单元格变化,达到阈值响铃
需求 在Excel中实现监控两个单元格之间的变化范围,当达到某个设定的值的范围内时,实现自动响铃提示。 实现: 首先设置Excel,开启宏、打开开发者工具,点击visual Basic按钮,然后在左侧双击需要监测的shee…...
跨域请求解决方案全解析
跨域请求可以通过多种技术方案实现,核心是绕过浏览器的同源策略限制。以下是主流解决方案及具体实现方式: 一、CORS(跨域资源共享) 最常用的标准化方案,通过服务器设置HTTP响应头实现: Access-Control-Al…...
【前端】vue3性能优化方案
以下是Vue 3性能优化的系统性方案,结合核心优化策略与实用技巧,覆盖渲染、响应式、加载、代码等多个维度: ⚙️ 一、渲染优化 精准控制渲染范围 v-if vs v-show: v-if:条件为假时销毁DOM,适合低频切换场景&…...

node 进程管理工具 pm2 的详细说明 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录 7
前言 我以 Ubuntu Server 打造的 NodeJS 服务器为主题的系列文章,经过五篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装…...

Flask与Celery 项目应用(shared_task使用)
目录 1. 项目概述主要功能技术栈 2. 项目结构3. 环境设置创建虚拟环境并安装依赖主要依赖 4. 应用配置Flask应用初始化 (__init__.py)Celery应用初始化 (make_celery.py) 5. 定义Celery任务 (tasks.py)任务说明 6. 创建API端点 (views.py)API端点说明 7. 前端界面 (index.html)…...
Fetch API 使用详解:Bearer Token 与 localStorage 实践
Fetch API:现代浏览器内置的用于发送 HTTP 请求的 API,Bearer Token:一种基于令牌的身份验证方案,常用于 JWT 认证,localStorage:浏览器提供的持久化存储方案,用于在客户端存储数据。 token是我…...
vue3 vite.config.js 引入bem.scss文件报错
[sass] Can’t find stylesheet to import. ╷ 1 │ use “/bem.scss” as *; │ ^^^^^^^^^^^^^^^^^^^^^^ ╵ src\App.vue 1:1 root stylesheet 分析 我们遇到了一个在Vue3项目中使用Vite时,在vite.config.js中引入bem.scss文件报错的问题。错误信息指出在App.vue…...

二叉树-226.翻转链表-力扣(LeetCode)
一、题目解析 翻转可以理解为树的左右子树交换,从根到叶子节点,但是这里交换的是链接的指针,而不是单纯的交换值,当出现nullptr时,也是可以交换链接的,交换值的话就不行了。 二、算法原理 依旧的递归&…...

HarmonyOS Next 弹窗系列教程(3)
HarmonyOS Next 弹窗系列教程(3) 选择器弹窗 (PickerDialog) 介绍 选择器弹窗通常用于在用户进行某些操作(如点击按钮)时显示特定的信息或选项。让用户可以进行选择提供的固定的内容。 以下内容都属于选择器弹窗: …...
编程笔记---问题小计
编程笔记 qml ProgressBar 为什么valuemodel.progress / 100 在QML中,ProgressBar的value属性用于表示进度条的当前进度值,其范围通常为0到1(或0%到100%)。当使用model.progress / 100来设置value时,这样做的原因是为…...

【docker】Windows安装docker
环境及工具(点击下载) Docker Desktop Installer.exe (windows 环境下运行docker的一款产品) wsl_update_x64 (Linux 内核包) 前期准备 系统要求2: Windows 11:64 位系统&am…...

无人机避障——感知部分(Ubuntu 20.04 复现Vins Fusion跑数据集)胎教级教程
硬件环境:NVIDIA Jeston Orin nx 系统:Ubuntu 20.04 任务:跑通 EuRoC MAV Dataset 数据集 展示结果: 编译Vins Fusion 创建工作空间vins_ws # 创建目录结构 mkdir -p ~/vins_ws/srccd ~/vins_ws/src# 初始化工作空间…...
人工智能--大型语言模型的存储
好的,我现在需要回答用户关于GGUF文件和safetensors文件后缀的差别的问题。首先,我得先确认这两个文件格式的具体应用场景和它们各自的优缺点。用户可能是在处理大模型时遇到了这两种文件格式,想了解它们的区别以便正确使用。 首先ÿ…...
OD 算法题 B卷【删除字符串中出现次数最少的字符】
文章目录 删除字符串中出现次数最少的字符 删除字符串中出现次数最少的字符 实现删除字符串中出现次数最少的字符,若(最少的)有多个字符出现次数一样,则都删除。输出删除后的字符串,其他字符保持原有顺序;…...

如何安装并使用RustDesk
参考: 搭建 RustDesk Server:打造属于自己的远程控制系统,替代 TeamViewer 和 ToDesk! 向日葵、ToDesk再见!自己动手,自建RustDesk远程服务器真香! 通俗易懂:RustDesk Server的搭…...

机器学习——随机森林算法
随机森林算法是一种强大的树集成算法,比使用单个决策树效果要好得多。 以下是生成树集成的方法:假设有一个大小为m的训练集,然后对于b1到B,所以执行B次,可以使用有放回抽样来创建一个大小为m的训练集。所以如果有10个…...

【从零学习JVM|第二篇】字节码文件
前言: 通过了解字节码文件可以帮助我们更容易的理解JVM的工作原理,所以接下来,我们来介绍一下字节码文件。 目录 前言: 正确的打开字节码文件 字节码文件组成 1. 魔数(Magic Number) 2. 版本号&…...

Fractal Generative Models论文阅读笔记与代码分析
何恺明分型模型这篇文章在二月底上传到arXiv预出版网站到现在已经过了三个月,当时我也听说这篇文章时感觉是大有可为,但是几个月不知道忙啥了,可能错过很多机会,但是亡羊补牢嘛,而且截至目前,该文章应该也还…...
软件测试—学习Day11
今天学习下兼容性 1.App兼容性常见问题 以下是关于 App 兼容性问题的常见举例,涵盖界面展示、操作逻辑、性能差异三大维度,涉及不同系统、设备及网络环境的兼容性场景: 一、界面展示问题 界面展示兼容性问题主要由操作系统版本差异、屏幕…...

OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
背景描述 有一套ogg远程抽取的环境,源端是AIX7.1环境的oracle 11.2.0.4版本的数据库,中间是OGG抽取服务器,目标端是centos 7.9环境的oracle 19c。 采用集成模式远程抽取源端数据正常,但是经典模式远程抽取源数据的时候抽取进程启…...

Kotlin REPL初探
文章目录 1. Kotlin REPL 简介2. 在命令行中玩Kotlin REPL2.1 下载Kotlin编译器压缩包2.2 安装配置Kotlin编译器2.3 启动Kotlin交互式环境2.4 在命令行玩Kotlin REPL 3. 在IDEA里玩Kotlin REPL3.1 打开Kotlin REPL窗口3.2 在Kotlin REPL窗口玩代码 4. Kotlin REPL 的优势 1. Ko…...

git引用概念(git reference,git ref)(简化对复杂SHA-1哈希值的管理)(分支引用、标签引用、HEAD引用、远程引用、特殊引用)
文章目录 **引用的本质**1. **引用是文件**2. **引用的简化作用** **引用的类型**1. **分支引用(Branch References)**2. **标签引用(Tag References)**3. **HEAD 引用**4. **远程引用(Remote References)*…...

Github 2025-06-07 Rust开源项目日报Top10
根据Github Trendings的统计,今日(2025-06-07统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1TypeScript项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Ge…...