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

STM32 HAL库实战:用CD74HC4067扩展16路模拟输入,附多路复用防干扰代码

STM32 HAL库实战用CD74HC4067扩展16路模拟输入附多路复用防干扰代码在嵌入式开发中资源有限的微控制器常常面临模拟输入通道不足的问题。以STM32F103C8T6为例虽然性能强大但ADC通道数量有限难以满足多传感器同时采集的需求。本文将详细介绍如何使用CD74HC4067模拟开关扩展16路模拟输入并分享实际项目中遇到的干扰问题及解决方案。1. CD74HC4067基础与硬件连接CD74HC4067是一款16通道模拟多路复用器/解复用器通过4个控制引脚S0-S3的组合选择16个通道中的一个与公共引脚SIG导通。其核心优势在于低导通电阻约70Ω和宽电压范围2V至6V非常适合与STM32配合使用。典型硬件连接方案电源部分VCC接3.3V与STM32电平匹配GND共地控制引脚S0-S3连接STM32任意GPIO如PB12-PB15使能引脚EN建议连接GPIO而非直接接地后续会解释原因信号路径SIG引脚连接STM32的ADC输入通道如PA0注意虽然CD74HC4067支持最高6V电压但与3.3V系统连接时输入信号不应超过VCC电压否则可能损坏芯片。2. CubeMX配置与基础驱动代码使用STM32CubeMX可以快速完成硬件初始化。以下是关键配置步骤GPIO设置将PB12-PB15配置为输出模式控制S0-S3新增一个GPIO如PB10控制EN引脚ADC配置启用所需ADC通道如ADC1_IN0设置合适的采样时间和分辨率推荐12位基础驱动代码如下封装了通道选择函数// 控制引脚定义 #define MUX_CTRL_PIN_0 GPIO_PIN_12 #define MUX_CTRL_PIN_1 GPIO_PIN_13 #define MUX_CTRL_PIN_2 GPIO_PIN_14 #define MUX_CTRL_PIN_3 GPIO_PIN_15 #define MUX_EN_PIN GPIO_PIN_10 void selectMuxChannel(uint8_t channel) { // 确保channel在0-15范围内 channel 0x0F; // 设置控制引脚状态 HAL_GPIO_WritePin(GPIOB, MUX_CTRL_PIN_0, (channel 0x01) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, MUX_CTRL_PIN_1, (channel 0x02) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, MUX_CTRL_PIN_2, (channel 0x04) ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, MUX_CTRL_PIN_3, (channel 0x08) ? GPIO_PIN_SET : GPIO_PIN_RESET); // 添加短暂延时确保信号稳定 HAL_Delay(1); }3. 多片级联与防干扰实战当需要扩展更多通道时多片CD74HC4067级联是常见方案但会引入信号干扰问题。以下是两种典型解决方案3.1 分时使能控制法通过MCU控制各芯片的EN引脚确保同一时间只有一片工作void readMultiMux(uint8_t muxCount) { for(uint8_t mux 0; mux muxCount; mux) { // 使能当前芯片禁用其他芯片 HAL_GPIO_WritePin(GPIOB, MUX_EN_PIN, (mux 0) ? GPIO_PIN_RESET : GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC, MUX_EN_PIN, (mux 1) ? GPIO_PIN_RESET : GPIO_PIN_SET); // 读取当前芯片的所有通道 for(uint8_t ch 0; ch 16; ch) { selectMuxChannel(ch); uint16_t adcValue HAL_ADC_GetValue(hadc1); // 处理采集到的数据... } } }3.2 硬件优化方案除了软件控制硬件设计也能有效减少干扰电源去耦每个CD74HC4067的VCC附近放置0.1μF陶瓷电容信号隔离在SIG路径上串联100Ω电阻并并联100pF电容布线优化控制信号与模拟信号走线避免平行长距离走线4. 性能优化与高级技巧4.1 高速采集优化默认代码中的HAL_Delay会限制采集速度。移除延时后需通过以下方式保证稳定性硬件优化缩短控制信号走线长度在控制线上串联33Ω电阻软件优化void fastSelectChannel(uint8_t channel) { GPIOB-ODR (GPIOB-ODR 0x0FFF) | ((channel 0x0F) 12); __NOP(); __NOP(); // 插入少量空指令替代延时 }4.2 自动校准技术不同通道可能存在导通电阻差异可通过以下校准流程消除误差连接已知电压源如3.0V到所有通道记录每个通道的ADC读数计算校准系数float calibFactors[16]; for(int i0; i16; i) { selectMuxChannel(i); uint16_t raw HAL_ADC_GetValue(hadc1); calibFactors[i] 3.0f / (raw * 3.3f / 4095.0f); }5. 实际项目经验分享在工业温控系统中使用4片CD74HC4067扩展64路温度采集时发现以下关键点使能切换时机EN引脚切换后至少等待2μs再进行通道选择否则会出现通道串扰电源噪声影响当所有通道同时切换时电源噪声会导致ADC误差增加约5%解决方法是在ADC采样期间关闭其他高功耗外设ESD防护在户外应用中所有输入通道需要增加TVS二极管否则容易因静电损坏芯片通过寄存器级操作优化最终实现了64通道每秒1000次采样的高性能void bulkReadChannels(uint16_t *results) { // 使用寄存器操作提高速度 for(int mux0; mux4; mux) { GPIOB-ODR (GPIOB-ODR 0xFCFF) | (mux 8); for(int ch0; ch16; ch) { GPIOB-ODR (GPIOB-ODR 0x0FFF) | (ch 12); results[mux*16 ch] ADC1-DR; } } }

相关文章:

STM32 HAL库实战:用CD74HC4067扩展16路模拟输入,附多路复用防干扰代码

STM32 HAL库实战:用CD74HC4067扩展16路模拟输入,附多路复用防干扰代码 在嵌入式开发中,资源有限的微控制器常常面临模拟输入通道不足的问题。以STM32F103C8T6为例,虽然性能强大,但ADC通道数量有限,难以满足…...

Adafruit退货政策全解析:电子元件退货的核心逻辑与实操指南

1. 退货政策的核心逻辑与适用场景 在创客圈和电子爱好者社群里,Adafruit 几乎是无人不晓的名字。无论是 Arduino 开发板、各种传感器,还是炫目的 NeoPixel LED 灯带,他们的产品是无数项目从想法变为现实的基石。但即便是最资深的玩家&#xf…...

BEAGLE库终极指南:如何快速实现高性能系统发育分析

BEAGLE库终极指南:如何快速实现高性能系统发育分析 【免费下载链接】beagle-lib general purpose library for evaluating the likelihood of sequence evolution on trees 项目地址: https://gitcode.com/gh_mirrors/be/beagle-lib 你是否在系统发育分析中遇…...

基于CircuitPython的红外遥控发射器:从原理到实现的万能控制方案

1. 项目概述:打造你的万能红外遥控发射器搞嵌入式开发的朋友,对红外遥控肯定不陌生。家里电视、空调、风扇的遥控器,本质上都是一个红外信号发射器。你有没有想过,自己动手做一个能模拟所有遥控器的“万能发射器”?今天…...

告别硬编码!用LVGL Keyboard控件5分钟搞定嵌入式设备的输入法界面

嵌入式UI革命:5分钟用LVGL Keyboard控件打造专业输入界面 在智能家居控制面板上输入Wi-Fi密码时,你是否厌倦了反复调试按钮坐标?为工业HMI设备设计参数输入界面时,是否受够了每次修改布局都要重写事件处理逻辑?传统嵌入…...

如何在Windows系统上一键部署终极包管理器:winget安装工具完全指南

如何在Windows系统上一键部署终极包管理器:winget安装工具完全指南 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh…...

26-cv-2777、26-cv-2964、26-cv-3022、26-cv-3949、26-cv-4062、26-cv-5488 Winnie Rosaline Kan 版权画维权!

案号:26-cv-2777、26-cv-2964、26-cv-3022、26-cv-3949、26-cv-4062、26-cv-5488原告品牌:Winnie Rosaline Kan 版权画品牌方:Casetagram Limited起诉地:美国伊利诺伊州代理律所:Keith起诉时间:2026年03月1…...

PromptFlow:企业级AI应用编排与全生命周期管理工具详解

1. 项目概述:PromptFlow,一个被低估的AI应用编排利器如果你最近在折腾大语言模型应用,从简单的聊天机器人到复杂的多步推理工作流,大概率会听到“LangChain”、“LlamaIndex”这些名字。它们确实火,社区活跃&#xff0…...

双源判别器提升城市场景语义分割精度

篇名问题,背景方法其他基于双源判别器的域自适应城市场景语义分割(2023)1.跨域数据集外观分布不同导致域差异,导致对抗训练不稳定,分割精度不够理想。2.网络对小目标分割精度不理想双源判别器(判别器输入包含 2 个不同域 的特征信…...

2026年腾讯云部署OpenClaw/Hermes Agent 配置Token Plan怎么快速上手?看这篇

2026年腾讯云部署OpenClaw/Hermes Agent 配置Token Plan怎么快速上手?看这篇。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Toke…...

别再为OSGB数据导入SuperMap iDesktop发愁了!手把手教你搞定倾斜摄影配置文件生成与常见报错

三维GIS实战:从OSGB到SuperMap iDesktop的完整避坑指南 当无人机航拍的倾斜摄影数据第一次在SuperMap iDesktop中成功加载时,那种从二维平面跃入三维空间的震撼感,是每个GIS从业者都难忘的体验。然而,这份喜悦往往被配置文件生成失…...

别再死记PRBS7/15了!用Python+NumPy手搓一个可配置的PRBS码生成器(附完整代码)

用Python构建可配置PRBS生成器:从LFSR原理到信号仿真实战 在数字通信和高速电路设计中,工程师们经常需要生成特定的测试信号来验证系统性能。伪随机二进制序列(PRBS)因其近似真实数据流的特性,成为信号完整性测试的黄金…...

OpenAI 把 Codex 塞进手机端了

OpenAI 把 Codex 塞进手机端了 根据 OpenAI,TechCrunch 的最新报道和 Reddit 上的前瞻消息 —— ChatGPT Mobile,正在灰度测试 Codex 预览版。 这不止是个移动端 IDE。 从目前的用例来看,他们的核心意图是:用自然语言在移动端直接…...

Java动态调试利器JDBG:无侵入线上问题诊断与热修复实战

1. 项目概述:一个为Java开发者准备的调试利器如果你是一名Java开发者,肯定对调试这件事又爱又恨。爱的是,它能帮你精准定位那些让人抓狂的Bug;恨的是,传统的调试方式——在IDE里打断点、单步执行——在面对复杂、分布式…...

Photoshop图层批量导出神器:快速高效导出PSD图层为独立文件的最佳解决方案

Photoshop图层批量导出神器:快速高效导出PSD图层为独立文件的最佳解决方案 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from Ado…...

星露谷物语SMAPI模组加载器:从零开始打造你的专属农场世界

星露谷物语SMAPI模组加载器:从零开始打造你的专属农场世界 【免费下载链接】SMAPI The modding API for Stardew Valley. 项目地址: https://gitcode.com/gh_mirrors/smap/SMAPI 还在为星露谷物语的模组安装而烦恼吗?每次看到心仪的模组却因为复杂…...

SAP 报SNAP_NO_NEW_ENTY错误【DB2 LOGSECOND参数】

1、在AI的指导下,备份并删除sapprd.snap db2 > create table sapqas.snap_bak_20250101 as (select * from sapqas.snap) with data; DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. D…...

Chatmark:Slack聊天记录自动化转Markdown文档的利器

1. 项目概述:从“聊天记录”到“结构化文档”的桥梁如果你和我一样,经常需要从各种即时通讯工具(比如Slack、Teams,甚至是微信工作群)的聊天记录里,整理会议纪要、提取待办事项,或者把一次技术讨…...

Transit Map:5分钟创建专业级公共交通动态地图的终极指南

Transit Map:5分钟创建专业级公共交通动态地图的终极指南 【免费下载链接】transit-map The server and client used in transit map simulations like swisstrains.ch 项目地址: https://gitcode.com/gh_mirrors/tr/transit-map 想象一下,您需要…...

桌面端酷安社区体验:Coolapk UWP 完整使用指南

桌面端酷安社区体验:Coolapk UWP 完整使用指南 【免费下载链接】Coolapk-UWP 一个基于 UWP 平台的第三方酷安客户端 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-UWP 你是否曾经希望在电脑大屏幕上舒适地浏览酷安社区,摆脱手机小屏幕的…...

如何智能批量添加EXIF水印:摄影师的自动化参数标注解决方案

如何智能批量添加EXIF水印:摄影师的自动化参数标注解决方案 【免费下载链接】semi-utils 一个批量添加相机机型和拍摄参数的工具,后续「可能」添加其他功能。 项目地址: https://gitcode.com/gh_mirrors/se/semi-utils 摄影爱好者和专业摄影师都面…...

联想刃7000k BIOS权限深度解析:从用户到管理员的实战技巧

联想刃7000k BIOS权限深度解析:从用户到管理员的实战技巧 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 联想刃7000k …...

基于hexascribe/chatbot-builder框架的对话机器人开发实战指南

1. 项目概述:一个面向开发者的对话机器人构建框架最近在GitHub上看到一个挺有意思的项目,叫hexascribe/chatbot-builder。乍一看名字,你可能会觉得这又是一个“又一个聊天机器人框架”,市面上类似的工具确实不少,从早期…...

如何用 curl 命令快速测试 Taotoken 的 API 是否连通

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何用 curl 命令快速测试 Taotoken 的 API 是否连通 在接入大模型服务时,直接使用 curl 命令测试 API 是最基础、最直…...

VSCode经典体验配置指南:从界面净化到键盘流工作流打造

1. 项目概述:为什么我们需要一个“经典体验”的VSCode?如果你和我一样,是个在代码编辑器里泡了十多年的老程序员,那你一定经历过从记事本、Notepad、Sublime Text到Visual Studio Code(VSCode)的漫长迁徙。…...

UWB定位标签天线怎么选?PATCH、PIFA、DIPOLE三种方案全对比(含NXP/Qorvo模组适配建议)

UWB定位标签天线选型指南:PATCH、PIFA、DIPOLE三大方案深度解析与工程决策 在物联网定位技术领域,超宽带(UWB)凭借其厘米级精度和强抗干扰能力,已成为工业定位、智能仓储和医疗设备追踪的核心解决方案。而天线作为UWB系统的"感官器官&qu…...

tchMaterial-parser:5分钟快速上手,轻松获取国家中小学智慧教育平台电子课本的完整指南

tchMaterial-parser:5分钟快速上手,轻松获取国家中小学智慧教育平台电子课本的完整指南 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载&#x…...

Android Studio中文界面解决方案:从语言障碍到开发效率提升

Android Studio中文界面解决方案:从语言障碍到开发效率提升 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 当你在And…...

Crypto AI Agent:基于LangChain与Web3的加密交易智能体实战

1. 项目概述:当AI智能体闯入加密世界最近在GitHub上看到一个挺有意思的项目,叫“Crypto-AI-Agent”。光看名字,你大概就能猜到它想干什么——让AI来玩转加密货币。这可不是简单的价格查询机器人,从项目描述和代码结构来看&#xf…...

别再只盯着PWM了!手把手教你为你的Arduino项目选择合适的DCDC调制方式(PFM/PWM/Burst Mode全解析)

别再只盯着PWM了!手把手教你为你的Arduino项目选择合适的DCDC调制方式(PFM/PWM/Burst Mode全解析) 当你为Arduino项目挑选电源模块时,是否曾被数据手册上PWM、PFM、Burst Mode这些术语搞得一头雾水?我曾在一个低功耗气…...