2025 Make Blocks阶段2 - 用PCF8574实现I2C扩展IO口
该项目使用了PCF8574,实现了I2C扩展IO口的设计,它的主要功能为:该项目使用了PCF8574实现了I2C扩展IO口控制小灯亮灭。
标签
KiCad
STM
I2C
IO
冲向天空的猪
更新2025-09-22
47
KiCad文件
全屏

任务功能介绍

设计一款通过I2C扩展IO的模块

    1. 使用2.54mm间距的连接器
    2. 板卡尺寸:小于40mmx40mm
    3. 输入信号:I2C
    4. 输出信号:至少8根数字I/O
    5. 包含电源:+5V、+3.3V、GND


本次实现的I2C的IO口扩展,使用PCF8574,来实现我们的功能。

image.png

查看手册可以知道,我们的器件其中的IO口拥有八个可以完成任务要求。

其中尺寸的要求我们使用小尺寸的封装0603来节约我们的面积。

设计思路

在设计的时候,在考虑使用的面积尽量小,就将其中的8个IO,分为俩部分,俩个排针分别4pin,大大节约我们的面积,在设计的时候也设计为IO口为俩俩一对.例如0.1是输出则2.3则是输入,来实现我们的小封装的要求,如果真的需要很多IO口使用,我们就将剩下的IO口也焊接出来。

设计框图的实现是基于手册中的参考建议复刻出来。

image.png

模块设计思路

image.png

在原理图设计的时候,通过将其中的8个IO口引出,在其中添加一个LED,来确认是否能正常驱动调试,然后将IO划分为4IO输出,4IO输入

image.png

PCB设计的时候,通过信号线联俄籍。通过左右IO排布来设计,如果需要更多IO口就将下面IO口焊接使用,如果使用不到,可以暂时不焊接,节省PCB的排布资源。

模块打板

在得捷上购买的主控很快就到手了,板子打过来就立马焊接完成。

效果图如下。

image.png

为了小封装,一边是I2C的接口实现,一边是引出2*2的输入输出IO口来配置,因为输入引脚需要添加上拉电阻,在设计的时候,就将其中分别错开来设计,将一半的引脚先不焊接,假如后面开发IO真的不够用,就将其中焊接上,为了扩展使用,在简单使用就可以剩下一些引脚占用。

设计流程框图

调试代码

本次实现就是将我们第一次和第二期的结合,测试我们的IO点亮小灯,通过I2C的方式实现。

根据手册我们可以知道,其中的I2C的地址,A1A2A3,其中都是GND。

image.png

我们写I2C地址是70,就将其中设置为我们写地址的相关函数。

软件代码

其中使用stm32cubemx生成我们的I2C接口配置。

image.png

#define PCF8574A_ADDR 0x70  
void PCF8574A_SetP7Low_Direct(void) {
uint8_t data = 0x7F;
HAL_I2C_Master_Transmit(&hi2c1, PCF8574A_ADDR, &data, 1, 100);
}
void PCF8574A_SetP7Higt_Direct(void) {
uint8_t data = 0xFF;
HAL_I2C_Master_Transmit(&hi2c1, PCF8574A_ADDR, &data, 1, 100);
}

主循环

while (1)
{
/* USER CODE END WHILE */
PCF8574A_SetP7Higt_Direct();
HAL_Delay(1000);
PCF8574A_SetP7Low_Direct();
HAL_Delay(1000);
/* USER CODE BEGIN 3 */
}

实现的效果是接上LED灯1ms在闪烁,其中LED正极接电源,负极接P7,通过其中IO的配置,来实现我们的电平的修改。

效果图展示

高电平的情况下我们的小灯灭

image.png

在低电平的情况下我们的小灯导通

ae67ede0495df90317b241dff2fadfd.jpg

心得体会

本次也是对自己的一次突破,也是将自己画好的俩个板子,联动调试,实现我们点亮小灯的测试,也在我们学习原理图的基础上,增加了自己动手实践的机会,感谢这次的活动。

附件下载
I2C.zip
PCF8574.kicad_pcb
PCF8574.kicad_sch
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号