I2C GPIO 扩展器在嵌入式系统中的实战应用与寄存器配置
📅 2026/7/14 18:46:51
👁️ 次浏览
1. I2C GPIO扩展器是什么当你用单片机做项目时最常遇到的瓶颈就是GPIO口不够用。比如要控制16个LED但你的STM32只剩8个GPIO这时候PCA9555这类I2C GPIO扩展器就像给你的开发板插上了外挂——通过两根I2C线SCL/SDA就能扩展出16个可编程IO口。我去年做智能家居中控时就遇到过这个问题。主控板需要同时读取多个温湿度传感器、控制继电器阵列还要驱动OLED屏GPIO根本不够分配。后来用了两颗PCA9555通过I2C级联硬是把8个GPIO扩展成了32个完美解决问题。这类芯片本质上是个智能开关阵列内部结构可以理解为输入/输出寄存器保存当前IO口电平状态配置寄存器决定每个引脚是输入还是输出模式极性反转寄存器可以翻转输入信号的电平逻辑2. 关键寄存器详解以PCA9555为例它的寄存器就像控制面板上的8个按钮#define INPUT_PORT0 0x00 // Port0输入状态 #define INPUT_PORT1 0x01 // Port1输入状态 #define OUTPUT_PORT0 0x02 // Port0输出锁存 #define OUTPUT_PORT1 0x03 // Port1输出锁存 #define POLARITY_PORT0 0x04 // Port0极性反转 #define POLARITY_PORT1 0x05 // Port1极性反转 #define CONFIG_PORT0 0x06 // Port0输入/输出配置 #define CONFIG_PORT1 0x07 // Port1输入/输出配置配置寄存器最常用它的每个bit对应一个引脚写1对应引脚设为输入模式高阻抗状态写0对应引脚设为输出模式比如要让Port0的0-3引脚作为输入4-7引脚作为输出uint8_t config 0x0F; // 00001111 HAL_I2C_Mem_Write(hi2c1, 0x40, CONFIG_PORT0, 1, config, 1, 100);实际项目中我发现上电时配置寄存器默认全为1输入模式。如果不先初始化就直接写输出寄存器会发现电平拉不低这时候要检查是否漏了配置模式。3. STM32实战代码解析最近用STM32F103驱动PCA9555的完整流程分享几个关键函数3.1 初始化配置void PCA9555_Init(I2C_HandleTypeDef *hi2c, uint8_t devAddr) { uint8_t config[2] {0x00, 0x00}; // 全部设为输出模式 HAL_I2C_Mem_Write(hi2c, devAddr1, CONFIG_PORT0, 1, config, 2, 100); }这里有个坑点STM32的HAL库要求7位设备地址左移1位。比如PCA9555地址是0x40实际要传入0x80。3.2 输出控制控制LED阵列的典型写法void PCA9555_SetOutput(I2C_HandleTypeDef *hi2c, uint8_t devAddr, uint16_t pins) { uint8_t output[2] { (uint8_t)(pins 0xFF), // Port0 (uint8_t)(pins 8) // Port1 }; HAL_I2C_Mem_Write(hi2c, devAddr1, OUTPUT_PORT0, 1, output, 2, 100); }调用示例点亮P0.1和P1.3PCA9555_SetOutput(hi2c1, 0x40, (11) | (111));3.3 输入读取读取按键状态的代码uint16_t PCA9555_GetInput(I2C_HandleTypeDef *hi2c, uint8_t devAddr) { uint8_t input[2]; HAL_I2C_Mem_Read(hi2c, devAddr1, INPUT_PORT0, 1, input, 2, 100); return (input[1] 8) | input[0]; }4. 典型应用场景4.1 矩阵键盘扫描用8个GPIO实现4x4矩阵键盘4个引脚配置为输出行扫描4个引脚配置为输入列检测// 扫描第row行 uint8_t ScanKeyRow(uint8_t row) { PCA9555_SetOutput(0xFF ^ (1row)); // 当前行拉低 return PCA9555_GetInput() 4; // 读取高4位列状态 }4.2 多设备级联通过改变A0-A2地址引脚可以挂载8个PCA9555。我在智能灯带项目中这样级联#define DEV_ADDR_BASE 0x40 for(int i0; i8; i) { PCA9555_Init(DEV_ADDR_BASE | i); PCA9555_SetOutput(DEV_ADDR_BASE | i, ledPattern[i]); }5. 避坑指南上电瞬态问题某些型号上电时输出会短暂振荡敏感电路要加RC延时I2C布线长距离传输要加1kΩ上拉电阻实测超过50cm时要用屏蔽线中断功能PCA9555的INT引脚可以配置为输入变化中断但要注意消抖热插拔风险带电插拔可能损坏I2C接口建议增加TVS二极管保护最近调试时还发现一个隐蔽问题当多个设备共用I2C总线时如果某个PCA9555电源不稳会导致整个总线挂死。后来在每条分支I2C线上串了100Ω电阻隔离问题解决。
1. 项目概述:为什么我们需要空间网格?如果你正在用 Unity 开发 PICO 上的 MR(混合现实)应用,那么“空间网格”这个概念,绝对是你绕不开的核心技术。简单来说,空间网格就是让虚拟世界“理解”并“…
📅 2026/7/14 18:46:51
1. 为什么选择TMC7300STM32F103RC组合驱动有刷直流电机有刷直流电机作为工业自动化领域的主力军,其控制方案的选择直接关系到系统稳定性和能耗表现。传统方案采用分立MOSFET搭建H桥配合基础PWM信号控制,这种方式在实验室环境下或许可行,但实际…
📅 2026/7/14 18:46:51
1. 地震资料数字处理中的滤波技术基础我第一次接触地震资料处理时,面对满屏的波形曲线完全摸不着头脑。直到老师指着屏幕上那些"毛茸茸"的干扰波说:"看,这些就是我们要对付的噪音。"这才明白,滤波技术就像是给…
📅 2026/7/14 18:46:51
影刀RPA 多账号管理与Cookie池:批量操作的基石
作者:林焱 如果需要用多个账号轮流操作(比如多个淘宝店铺、多个小红书账号),手动切换账号登录效率太低了。这篇文章讲怎么批量管理账号的登录状态,需要的时候…
📅 2026/7/14 19:39:00
如今,在科学技术飞速发展的情况下,信息化的时代也已因为计算机的出现而来临,信息化也已经影响到了社会上的各个方面。它可以为人们提供许多便利之处,可以大大提高人们的工作效率。随着计算机技术的发展的普及,各个领域…
📅 2026/7/14 19:39:00
更多请点击:
https://kaifayun.com
第一章:GitHub Copilot Docker BuildKit 协同范式演进 GitHub Copilot 与 Docker BuildKit 的深度协同正重塑现代容器化开发的工作流范式。二者不再孤立运行于编码与构建两个阶段,而是通过语义感知、上下…
📅 2026/7/14 19:39:00
更多请点击:
https://codechina.net
第一章:ChatGPT课程开发的合规性底层逻辑 ChatGPT课程开发并非单纯的技术实现过程,其核心约束来自数据主权、模型使用边界与教育场景责任三重合规基线。当教育机构或开发者调用OpenAI API构建教学内容时&…
📅 2026/7/14 19:39:00
当AI流量从“长河”变成“暴雨”,谁来重织算力底座?摘要:以MoE稀疏大模型与多智能体(Agentic AI)协同为代表的新一代负载,正把数据中心的通信特征从少数大流推向海量碎包。传统以太网/RDMA交换机在这种流量…
📅 2026/7/14 19:39:00
各位工程师好,这里是 EVST(以物思)的官方技术账号。CSDN 这个号,想用来做一件事:把工业机器人集成里真正吃功夫的工程问题摊开来讲。 不是讲「机器人有几个轴」「重复定位精度 0.02mm」这种参数表能查到的东西…
📅 2026/7/14 19:38:00
从“创始人投影”到“真理映射”——大语言模型认知本质的哲学批判与范式重构
摘要
当前全球主流大语言模型(LLMs)在技术指标上持续突破,却在认知本质上陷入了一种根本性的“搞反”状态:它们本应成为人类超越自身认知局限的“传…
📅 2026/7/14 0:00:05
Hadoop 3.2.2 JDK 21 Windows开发环境全流程实战指南对于需要在Windows环境下进行大数据开发的Java/Scala开发者来说,搭建一个本地Hadoop开发环境是入门的第一步。本文将带你从零开始,完成Hadoop 3.2.2与JDK 21的环境搭建,并实现一个完整的M…
📅 2026/7/14 0:00:05
1. 项目概述:为什么你需要Boost库? 如果你用C写过一些项目,尤其是涉及到网络、并发、文件系统或者需要处理一些复杂数据结构时,大概率会听过或者用过Boost库。它不是C标准库的一部分,但它在C社区的地位,几…
📅 2026/7/14 0:00:05
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/14 6:35:02
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/14 12:06:52
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/14 7:15:18
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/14 15:11:56
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/13 19:47:36
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/14 15:11:56