PCF8574芯片介绍及驱动方法

简介: PCF8574芯片介绍及驱动方法

前言

本篇文章带大家学习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的驱动代码。


相关文章
|
数据采集 定位技术 数据安全/隐私保护
ESP8266调用NTP服务器进行时间校准
NTP服务器通常连接到具有高度精确时间源的设备,例如:GPS接收器或原子钟,以确保提供准确如一的时间。网络上的计算机可以通过连接到NTP服务器来同步其时间,并确保它们在同一时刻进行操作。
2303 0
|
传感器 IDE 物联网
ESP8266接入阿里云物联网平台上传温湿度数据
本文章使用NodeMCU(ESP8266)开发板和SHTC3温湿度传感器接入阿里云物联网(IoT)平台,并上传读取到的温湿度数据。
23229 6
ESP8266接入阿里云物联网平台上传温湿度数据
2节串联锂电池充电管理芯片,有5V升压,9-12V降压,快充升降压
2节串联锂电池供电电压范围为6V-8.4V,标称7.4V。根据输入电压不同,需选择不同模式的充电管理芯片。5V输入需升压型,9V、12V输入需降压型,5V-20V输入需升降压型。推荐PW4284、PW4084、PW4203等型号,适用于各种应用场景。
|
测试技术 Linux Android开发
i2c总线及设备测试工具i2ctools:i2cdetect、i2cdump、i2cget、i2cset
本文介绍了i2ctools工具集的使用,包括i2cdetect、i2cdump、i2cget和i2cset,这些工具有助于I2C设备的开发和调试,通过检测设备、读写寄存器和数据块来提高开发效率。
4626 1
关于流控RTS/CTS ,DTR/DSR的说明
关于流控RTS/CTS ,DTR/DSR的说明
4129 0
|
存储 传感器 芯片
STM32--SPI通信与W25Q64(1)
STM32--SPI通信与W25Q64(1)
861 0
|
存储 芯片
STM32速成笔记(十一)—EEPROM(AT24C02)
本文详细介绍了什么是AT24C02,介绍了它的引脚,读/写时序,给出了应用实例和详细的程序设计。最后,简单介绍了AT24C02的应用场景。
3048 0
STM32速成笔记(十一)—EEPROM(AT24C02)