首页 > 其他分享 >PCF8574芯片介绍及驱动方法

PCF8574芯片介绍及驱动方法

时间:2023-11-11 14:00:51浏览次数:34  
标签:HAL 芯片 Init hi2c1 PCF8574 驱动 I2C

(文章目录)


前言

本篇文章带大家学习PCF8574芯片,了解PCF8574芯片有什么作用,以及学习PCF8574的控制方法。

一、PCF8574芯片介绍

PCF8574是TI(Texas Instruments)公司生产的一种常见的I/O扩展芯片,用于将微控制器的少量GPIO引脚扩展为更多的GPIO接口。它采用I2C总线(串行通信协议)进行与微处理器的通信。

PCF8574芯片具有8个并行输入/输出引脚(即I/O口),可以根据需要配置为输入或输出模式。每个I/O口可以提供高电平或低电平的逻辑状态,用于控制外部设备或接口。

以下是PCF8574芯片的特点和工作原理:

1.I2C接口: PCF8574芯片使用I2C通信协议进行与主控器的通信。I2C总线提供了双线控制和数据传输,使得多个设备可以在同一总线上进行通信。

2.8位I/O口: PCF8574芯片提供了8个I/O口,每个I/O口可以配置为输入或输出模式。可以通过读取和写入相应的寄存器来读取或控制每个I/O口的状态。

3.输入缓冲: PCF8574芯片具有输入缓冲区,可以防止输入信号的干扰对芯片的整体性能产生不良影响。

4.输出驱动能力: PCF8574芯片的输出引脚可以提供较高的驱动能力,适用于连接各种外设设备。

5.地址选择: PCF8574芯片的地址可以进行选择,允许多个芯片在同一I2C总线上共存。

PCF8574芯片常用于扩展微控制器的GPIO数量,特别适用于资源有限的嵌入式系统。通过与主控器之间的I2C通信,可以轻松地控制和读取外部设备,例如LED、LCD、继电器等。

需要注意的是,由于PCF8574是一个数字扩展芯片,每个I/O口的输出只能是高电平或低电平,无法进行模拟信号输出。

PCF8574功能框图: 在这里插入图片描述 PCF8574管脚描述和配置: 在这里插入图片描述

二、PCF8574读写地址确定

PCF8574芯片的地址由A0、A1和A2引脚决定,它们可以通过外部电阻的连接方式来设置为高电平(VCC)或低电平(GND),以确定芯片的地址。每个引脚可以选择连接到VCC或GND,以产生不同的电平状态,从而生成不同的地址。

PCF8574的读写地址由7位地址位+1位读写位组成。

假如A2,A1,A0为001,那么PCF8574的读地址为0x42,写地址为0x43。 在这里插入图片描述

三、PCF8574读写模式传输数据

写模式:

写模式发送数据流程:

发送起始信号,发送设备写地址,等待应答,发送数据,(等待应答,发送数据 可以连续发送多个数据)结束信号。 在这里插入图片描述

读模式:

读模式发送数据流程:

发送起始信号,发送设备读地址,等待应答,读取数据,(等待应答,读取数据 可以连续读取多个数据)结束信号。 在这里插入图片描述

四、PCF8574准双向I/O口

准双向I/O口通常指的是可以在输入和输出之间切换的数字I/O口。这种类型的端口允许设备在运行时动态地更改端口的功能,既可以作为输入接口接收外部信号,也可以作为输出接口发送信号。

在数字系统中,一般有两种主要类型的I/O口:

1.输入口: 用于接收外部信号或传感器的数据。这样的口通常被配置为输入,以便读取外部电平或数字信号。 2.输出口: 用于向外部设备发送信号或控制信号。这样的口通常被配置为输出,以便通过改变输出电平或数字值来与外部设备进行通信。

而"准双向I/O口"则允许在运行时切换这两种功能。这种灵活性对于一些应用场景非常有用,例如,一个数字引脚既可以用于读取传感器的数据,又可以用于控制一个执行器。

举例来说,PCF8574就提供了这样的准双向I/O口。它可以配置每个端口是输入还是输出,从而实现动态切换。这种功能使得PCF8574非常适用于通过I2C总线扩展数字I/O的场景,同时提供了灵活性和便利性。 总体来说,准双向I/O口是数字系统中一种非常有用的特性,可以在一个端口上灵活地实现输入和输出功能,以适应不同的应用需求。

PCF8574的8个准双向IO口:

在这里插入图片描述

五、PCF8574驱动程序编写

#include "stm32f4xx_hal.h"

// 定义PCF8574的I2C地址
#define PCF8574_ADDRESS 0x4E

// I2C句柄
I2C_HandleTypeDef hi2c1;

// 初始化I2C总线
void I2C_Init(void)
{
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 100000;
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

  if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  {
    Error_Handler();
  }
}

// PCF8574读取一个字节的数据
uint8_t PCF8574_Read(void)
{
  uint8_t data = 0;
  if (HAL_I2C_Master_Receive(&hi2c1, PCF8574_ADDRESS, &data, sizeof(data), HAL_MAX_DELAY) != HAL_OK)
  {
    Error_Handler();
  }
  return data;
}

// PCF8574写入一个字节的数据
void PCF8574_Write(uint8_t data)
{
  uint8_t i2cData[1] = {data};
  
  if (HAL_I2C_Master_Transmit(&hi2c1, PCF8574_ADDRESS, i2cData, sizeof(i2cData), HAL_MAX_DELAY) != HAL_OK)
  {
    Error_Handler();
  }
}

// 主函数
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  
  // 初始化I2C总线
  I2C_Init();

  while (1)
  {
    // 向PCF8574写入数据,控制相应的IO口
    PCF8574_Write(0x0F); // 举例:控制PCF8574的低4位IO口输出高电平,其余输出低电平
    HAL_Delay(1000);
    
    PCF8574_Write(0xF0); // 状态翻转,控制PCF8574的低4位IO口输出低电平,其余输出高电平
    HAL_Delay(1000);
  }
}

总结

本篇文章主要讲解了PCF8574芯片功能,然后带大家编写使用了PCF8574的驱动代码。

标签:HAL,芯片,Init,hi2c1,PCF8574,驱动,I2C
From: https://blog.51cto.com/u_16153875/8317897

相关文章

  • STM32驱动OLED实现充电动画
    先看效果因为之前在项目中OLED一般只显示字符,今天闲来无事了解了一下取模功能,话不多说,直接开始教学。首先寻找一张你想显示的图片使用画图打开(重新调整大小,128乘以64)接着保存,注意是以单色图保存,下面是保存为单色的样子接着取模(使用的软件为Pctolcd2002),模式选择图片模式,按照下图修......
  • 基于MacOS M2 芯片的Mysql 数据库安装与使用
    第一步:MySQL软件下载与安装1.1 登录网址:https://dev.mysql.com/downloads/mysql/,选择系统:MacOS,版本:8.0.35,或者更新的版本,OSversion选择ARM,64-bit,点击下Download1.2 接下来安装软件:双击mysql-8.0.35-macos13-arm64.dmg,点继续或下一步,使用强密码usestrongpasswordencr......
  • 开发指南,自研关键字驱动框架
    开发指南环境准备安装Python,3.8以上版本安装poetry包管理工具,pipinstallpoetry克隆代码,gitclonehttps://github.com/dongfanger/tep准备就绪,撸起袖子干!目录结构distpoetrybuild生成目标文件,用于发布pypitep核心代码tests测试代码utils工具包......
  • Linux MIPI 摄像头驱动框架编写(RN6752解码芯片)
    一、概述在编写MIPI摄像头驱动之前,需要先了解Media子系统的链路关系,这里我就不介绍了,需要的看我之前的笔记:LinuxMedia子系统链路分析。理解Media子系统链路关系后,会发现ISP不论是在摄像头端,还是集成在SOC中,驱动程序都是差不多的。多观察一下开发板中的其他案例,便会......
  • 大型集团企业数据治理方案,以“应用驱动”的数据治理策略 | 行业方案
    数据治理是推动大型集团企业转型升级、提升竞争优势、实现高质量发展的重要引擎。通过搭建大数据平台,实现对业务系统数据的采集、清理、建模、整合,建立一个符合业务需求的数据决策平台,形成企业数字化转型关键能力,支撑数据赋能业务价值,最终推动组织及管理升级,实现数字化转型。以某......
  • SATA硬件驱动器接口的可制造性问题详解
    SATA接口是硬盘与主机系统间的连接部件,作用是在硬盘缓存和主机内存之间传输数据。不同的硬盘接口,决定着硬盘与计算机之间的连接速度,在整个系统中,硬盘接口的优劣,直接影响着程序运行快慢和系统性能好坏。SATA接口介绍SATA(SerialATA)是串行ATA的缩写,是一种完全不同于并行ATA的新型......
  • Esxi 6.7下面的网卡驱动问题
    前话:我们在运维VMware ESXI主机时,经常会遇到紫屏,网络中断,存储访问慢等种疑难杂症。大多时间都是感觉无从下手,只能截图,重启,收集日记,上报厂家CASE。厂家大多的答复是固件,驱动的兼容问题。今天就分享一下如何使用ESXICLI 命令查询三个重灾区:网卡,HBA,RIAD卡信息。esxcli networknic......
  • 新方向!文心一言X具身智能,用LLM大模型驱动智能小车
    具身智能已成为近年来研究的热点领域之一。具身智能强调将智能体与实体环境相结合,通过智能体与环境的交互,来感知和理解世界,最终实现在真实环境中的自主决策和运动控制。如何基于文心大模型,低成本入门“具身智能”,并用身边的普通硬件就能快速搭建“能理解、会决策”的实物智能体呢?为......
  • SUB-1G芯片---PAN3031低功耗远距离无线收发芯片
    PAN3031是一款采用ChirpIoTTM调制解调技术的低功耗远距离无线收发芯片,支持半双工无线通信,工作频段为370~590MHz和740~1180MHz,该芯片具有高抗干扰性、高灵敏度、低功耗和超远传输距离等特性。最高具有-129dBm的灵敏度,22dBm的最大输出功率,产生业界领先的链路预算,使其成为......
  • 【原创】爆肝23页教程,自研关键字驱动框架
    tep关键字驱动框架教程tep简介tep是TryEasyPytest的首字母缩写,关键字驱动框架,专注于接口自动化测试,单个文件即可完成用例编写。设计理念✔️稳定:基于成熟框架pytest,天生强大✔️规范:RobotFramework风格,井井有条✔️统一:关键字命名与JMeter组件一致,一知万用✔️原生:关键字用法保......