基于STM32、HAL库的MCP23017 I/O扩展器驱动程序设计

一、简介:

MCP23017是Microchip公司生产的一款16位I/O扩展芯片,通过I2C接口与微控制器通信。主要特性包括:

  • 工作电压:1.8V-5.5V

  • 16个可独立配置的GPIO(分为两个8位端口:PORTA和PORTB)

  • 可配置输入/输出方向

  • 可编程内部上拉电阻

  • 可配置中断输出

  • 400kHz快速模式I2C兼容接口

  • 3个硬件地址引脚,最多可连接8个器件

二、硬件接口:

MCP23017       STM32L4xx
----------------------------
VDD (2)       3.3V
VSS (1)       GND
SCL (12)      PB6/I2C1_SCL
SDA (13)      PB7/I2C1_SDA
A0 (15)       GND (地址000)
A1 (16)       GND (地址000)
A2 (17)       GND (地址000)
RESET (18)    3.3V (通过10k上拉)

三、头文件:

#ifndef MCP23017_H
#define MCP23017_H

#include "stm32l4xx_hal.h"

#define MCP23017_ADDRESS 0x20 // 默认地址(A2=A1=A0=0)

// 寄存器定

分享一款基于51单片机和MCP23017的IO扩展方案 我是『芯知识学堂』的SingleYork,今天笔者要给大家分享一款单片机IO扩展的设计方案。 学单片机的小伙伴们都知道,单片机的IO口数量都是固定的,在做项目的时候,需要根据自己实际用到的IO数量,再综合考虑一下单片机自带的硬件资源,我们会选择不同封装的单片机。 然而,当所需要用到的IO口数量大于该品牌单片机最大IO口数量的又怎么办呢?也许有人会说,换别的品牌的单片机不就好了,比如,总所周知,STC单片机最大的封装是64脚的,出去两个电源引脚,最大IO口数量可以达到62个,然而,假如我在一个项目中要用到80 阅读详情

相关推荐

MCP23017 I²C端口扩展器原理与嵌入式驱动实战

I²C端口扩展器是嵌入式系统中解决MCU GPIO资源瓶颈的关键外设,其核心在于通过标准I²C总线以极低引脚开销(仅SCL/SDA)实现多路可编程数字I/O。工作原理涵盖寄存器映射、Bank模式切换、中断触发机制及输入滤波等底层逻辑,技术价值体现在高配置灵活性、确定性实时响应与硬件消抖能力。典型应用于工业HMI、多按键面板、LED阵列控制及传感器汇聚等场景。本文深入解析MCP23017的寄存器架构、中断设计与HAL/LL双栈驱动实现,覆盖Bank模式、INTCAP锁存读取、I²C总线互斥等工程关键点。

weixin_35815766的博客 644

MCP23017 I²C GPIO扩展器原理与嵌入式驱动实战

GPIO扩展器是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心在于通过串行总线(如I²C)实现并行IO的高效复用。MCP23017作为经典16位I²C GPIO扩展芯片,依托双端口独立配置、硬件中断触发、可编程上拉及宽电压兼容等特性,在STM32、ESP32和树莓派等平台广泛用于传感器接入、LED控制与按键扫描等场景。其寄存器级可配置性支撑灵活的输入/输出/中断混合模式,而低至2线的硬件开销显著降低PCB复杂度与BOM成本。本文围绕MCP23017展开从通信协议、寄存器架构到HAL库与裸机驱动的全链路

weixin_42360846的博客 303

轻量级MCP23017 I²C GPIO驱动库设计与嵌入式应用

GPIO扩展芯片是解决微控制器I/O资源瓶颈的关键技术,其核心原理基于I²C总线协议实现多路数字信号的寄存器级控制。通过标准通信接口与可编程寄存器映射,此类芯片在保持硬件简洁性的同时提供中断响应、极性反转、上拉配置等工程实用功能,显著提升系统可扩展性与实时性。典型应用场景涵盖工业继电器阵列控制、智能家居按键矩阵扫描及传感器数字接口桥接等对可靠性与低开销有严苛要求的嵌入式领域。本文聚焦于MCP23017这一经典16位I²C GPIO扩展器的轻量驱动实现,深入解析其寄存器操作逻辑、中断机制设计及跨平台(Ardu

weixin_35516273的博客 618

MCP23S17 SPI端口扩展器驱动原理与工程实践

SPI端口扩展器是嵌入式系统中解决MCU I/O资源不足的关键技术,其核心在于通过标准SPI总线(SCLK/MOSI/MISO/CS)实现寄存器级数字I/O扩展。原理上依赖指令字节寻址、硬件地址编码(A0-A2)与BANK分页寄存器映射,确保多设备共总线的可靠通信。技术价值体现在低引脚开销(仅4线)、高并发能力(单事务16位同步读写)及中断事件驱动支持。典型应用场景包括LED矩阵控制、按键阵列扫描、继电器板管理及128路工业I/O子系统构建。本文深入解析MCP23S17的寄存器操作机制、状态缓存优化策略与中

weixin_42348783的博客 688

MCP23017 I²C端口扩展器驱动设计与工业级实践

I²C端口扩展器是嵌入式系统中解决MCU GPIO资源不足的关键技术,其核心在于通过标准I²C总线(100kHz/400kHz)实现低引脚占用的多路数字I/O延伸。原理上依赖寄存器映射控制、中断触发机制与读-修改-写安全操作,技术价值体现在确定性时序、宽温工作(-40°C~+85°C)、超低待机功耗(<1μA)及工业级可靠性。典型应用场景包括HMI按键/LED扩展、传感器数字输入汇聚、继电器阵列驱动及电池供电设备的中断唤醒。本文围绕MCP23017展开,深入解析其寄存器架构、Arduino与STM32 HA

weixin_42593549的博客 129

MCP23017增强库:为HC-SR04超声波测距实现硬件级pulseIn()

GPIO扩展芯片是嵌入式系统中突破主控IO资源瓶颈的关键技术,其核心原理在于通过I²C/SPI总线将外设引脚管理卸载至专用协处理器。MCP23017作为工业级16位I/O扩展器,支持寄存器级配置、中断捕获与输入滤波,具备高可靠性与跨平台兼容性。该器件的技术价值在于释放主MCU资源、提升时序确定性,并支撑多传感器并行接入。典型应用场景包括AGV避障、智能仓储测距及IoT边缘节点传感扩展。本文聚焦其增强型Arduino驱动库,深度整合pulseIn()测量逻辑至硬件中断层,实现对HC-SR04等脉冲型传感器的微

weixin_29092787的博客 529

MCP23S17 SPI驱动开发与嵌入式I/O扩展实战

I/O扩展器是嵌入式系统中解决MCU GPIO资源不足的关键技术,其核心原理基于标准外设接口(如SPI/I²C)实现寄存器级远程控制。MCP23S17作为高性能16位SPI I/O扩展芯片,凭借10 MHz高速通信、双中断输出、可配置上下拉及极性反转等特性,在LED矩阵驱动、按键扫描和低功耗唤醒等场景中展现出显著工程价值。其寄存器映射清晰、协议简洁(8位指令字节+地址/数据帧),适配STM32 HAL库与FreeRTOS等主流开发环境,支持裸机、中断及多任务安全访问。本文围绕MCP23S17的SPI通信机制

weixin_36001279的博客 290

ESP8266-Arduino编程实例-MCP23017并行IO扩展驱动

MCP23017是一个用于 I2C 总线应用的 16 位通用并行 I/O 端口扩展器。

视觉与物联智能 3235

基于STM32、HAL库的MCP23017T I/O扩展器驱动程序设计

/ 默认配置: 顺序操作(SEQOP=0), 禁止地址递增(DISSLW=0), 开漏输出(ODR=0), 极性(INTPOL=0)// DEFVAL = 1, 下降沿。// DEFVAL = 0, 上升沿。if (GPIO_Pin == GPIO_PIN_0) { // 假设MCP23017的INT连接到PA0。// 比较DEFVAL。

corlin6688的博客 221

MCP23017 模块 拓展IO + Arduino IDE + ESP32S3驱动测试

简要记录了关于MCP23017的相关资源,用户手册、驱动代码、接口特点,基于Arduino IDE 的一篇简介类文章。

m0_74001972的博客 2947

mcp23017-demo:用于控制 MCP23017 IO 扩展器的演示程序

mcp23017-演示 用于控制 MCP23017 I/O 扩展器的演示程序 这些程序将帮助您了解如何控制 MCP23017 扩展器(最值得注意的是,将它们设置为输出)。 您必须安装 libi2c-dev。 通常,Linux 安全策略禁止非 root 用户直接访问硬件。 您可以通过创建 udev 规则文件来创建文件来更改它: sudo nano /etc/udev/rules.d/60-i2c-tools.rules 内容如下: KERNEL=="i2c-[1-9]*", GROUP="i2c", MODE="0660" 这将允许 i2c 组中的任何人写入 /dev/i2c-*。 您必须将您的用户帐户添加到 i2c 组: sudo adduser [username] i2c 为方便起见,包含udev规则文件,您可以将其复制到/etc/udev/rules.d 最好在

MCP23017 IIC IO扩展芯片输入测试程序_mcp2301751例程_

51单片机通过IIC总线实现MCP23017输出入测试

MCP23017 IIC IO扩展芯片输出测试程序_mcp2301751例程_

51单片机通过IIC总线实现MCP23017输出

(论文速读)PTV3: 更简单、更快速、更强大的3D点云处理新突破

该论文提出PointTransformerV3(PTv3),通过简化设计实现3D点云处理的效率突破。该研究摒弃复杂注意力机制,转而采用点云序列化和补丁注意力等高效方法,将感受野从16点扩展到1024点,在保持高精度的同时实现3倍速度提升和10倍内存优化。PTv3在超过20个室内外场景任务中取得SOTA结果,ScanNet语义分割达79.4%mIoU,Waymo检测提升3.3%APH。核心创新包括四种空间填充曲线序列化模式和xCPE位置编码,为3D感知的工业应用提供了高效解决方案。

LJ1147517021的博客 1369

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6495

避坑指南:ZYNQ PS端读写BRAM时容易忽略的5个配置细节(基于Vivado 2022.1)

本文基于Vivado 2022.1,总结了ZYNQ PS端读写单口BRAM时5个易被忽略的关键配置细节。内容涵盖关闭Safety Circuit以优化时序、精确匹配AXI控制器与BRAM的地址深度、注意PS端函数位宽与地址对齐、正确连接时钟复位域,并提供了实用的调试技巧与诊断代码,帮助工程师规避常见陷阱,确保数据交互稳定可靠。

net55的博客 370

【大数据Java基础-Java基础01】环境搭建(一)Sublime Text3搭建Java编译环境(Windows系统)

1. 首先配置好Java环境变量 我的jdk版本是1.8.0_191,存放目录是C:\Program Files\Java,因此添加以下环境变量 (1)系统变量→新建 JAVA_HOME 变量,变量值为: C:\Program Files\Java\jdk1.8.0_191 (2)系统变量→找到 Path 变量→编辑,末尾加入: ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 如果Path变量末尾本身有“;”,则上述路径前面则不需要加“;” (3)系统变量→新建 CL

微信搜:import_bigdata,大数据领域硬核原创作者 545

全面指南:PyTorch与ROCm版本兼容性及多版本环境管理

本文详细介绍了在AMD GPU上配置PyTorch开发环境的完整流程,重点解决版本兼容性和多版本ROCm环境管理问题。主要内容包括:1) PyTorch与ROCm版本对应关系查询;2) 四种查看ROCm版本的方法;3) 使用update-alternatives管理多版本ROCm;4) 环境变量配置与冲突解决方案;5) 完整的验证流程和性能测试方法。文章提供了最佳实践建议和故障排除清单,帮助开发者快速搭建稳定高效的深度学习开发环境,充分发挥AMD GPU硬件性能。通过系统化的验证流程确保各组件协同工作,解决

数字人生 601

K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

🔴 K8s(二十一):在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

✨ 欢迎来到【Seal ^_^ 的CSDN博客】!✨ 3万+

【CAD】【手把手带你写一个DXF&JAVA解析框架】02——整理DXF元数据实体类,涵盖重要属性与对照组码

本文系统梳理了DXF文件解析中的核心元数据类,重点分析了Tables段(图层、块记录)、Blocks段和Entities段的关键数据结构。通过详细的组码说明和对照代码实现,阐述了图层定义(DXFLayer)、块记录(DXFBlockRecord)、应用程序标识(DXFAppId)等表对象的属性构成;同时解析了直线(DXFLine)、多段线(DXFLwPolyLine)、圆弧(DXFArc)、文字(DXFText)等实体类的几何特征与属性定义。文章还构建了顶点(Vertex)、基类(DXFEntity、DXF

Wonder ZH 261

抖音中动态生成msToken的方法

抖音中动态生成msToken的方法

sh_moranliunian的博客 2480

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 基于STM32、HAL库的TCA9555PWR I/O扩展器驱动程序设计
下一篇: 基于STM32、HAL库的TCA6424ARGJR I/O扩展器驱动程序设计
colin工作室
博客等级 码龄3年 2138粉丝 647原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

colin工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值