目录
一、前言
当我们设计一款产品的时候,如果想要实现多种功能,那么可能会涉及到主控芯片引脚数量不够使用的情况,这个时候可能会需要想办法用更少的引脚控制更多的芯片,例如:3-8MUX也就是译码器、拓展IO板。
而我们今天就是要讲述MCP23017这一款芯片。
二、MCP23017简要介绍
这是一款基于 I2C 接口控制的 I/O 扩展模块,可外扩 16Pin I/O 口,支持同时使用多达 8 个,即 可扩至 128Pin I/O 口,兼容 3.3V 和 5V 电平。
主要特点:
- I2C 接口控制,仅需 2 根信号线,即可扩展出 16 个 I/O 口;
- I2C 通信地址可设置,短接 A0/A1/A2 焊点可修改通信地址;
- 提供 PH2.0 端子和焊盘两种接口类型,支持并联多个 I2C 模块;
- 板载电平转换电路,可兼容 3.3V/5V 的工作电平;
硬件引脚连接:
功能引脚 | 描述 | Arduino Uno | STM32F407 | RASPBERRY |
VCC | 电源正 | 3.3V/5V | 3.3V/5V | 3.3V/5V |
GND | 电源地 | GND | GND | GND |
SDA | I2C数据线 | SDA | PB7 | SDA |
SCL | I2C时钟线 | SCL | PB6 | SCL |
INTA | 中断输出引脚 | 3 | PA0 | 0 |
INTB | 中断输出引脚 | 3 | PA0 | 0 |
三、MCP23017驱动测试
由于我是直接使用MCP23017的拓展引脚作为CS引脚,配合ESP32S3的SPI进行的协同。驱动代码也是直接尝试就调通了,之后还自己重写了一遍MCP23017的驱动代码,还是不难的。
用户手册: MCP23017-IO-Expansion-Board-user-manual-cn.pdf (waveshare.net)
文章内上传了相关的驱动代码
也可以访问以下的链接:
四、总结
看完上述内容,对于什么是MCP23017有什么作用肯定有了了解,它其实真正意义上只是一个功能模块,服务于其他芯片。
后续如果有关于MCP23017应用方面的测试我还会发文章分享出来,但是应该会以其他芯片内容为主,拓展IO内容为辅。
如果对本文的内容有任何改进的建议也欢迎评论&私信告诉我!如果本文对你有帮助的话,不妨点个赞。欢迎留言讨论问题,一起讨论问题、解决问题。