PCF8574AT是飞利浦的一个IO扩展IC,I2C通讯接口,有8个IO口可以配置,只有一个寄存器。常见的一种应用是用它来作为LCD1602的I2C通讯界面。

在Arduino的LiquidCrystal_I2C库中,默认情况下PCF8574AT使用0x3F作为高7位地址,将它左移一位以后就是7E,最低位为0是写操作,最低位为1是读操作,它在通讯的时候自动进行转换。

Arduino是如此使用:

LiquidCrystal_I2C lcd(0x3F,20,4);   //LCD2004, 地址0x3F

但是在STM32的HAL库中,需要我们先对地址进行转换,我们在System Workbench中把鼠标放在I2C的相关函数上,比如HAL_I2C_Master_Transmit(),会出现如下提示:

**

* @brief  Transmits in master mode an amount of data in blocking mode.

* @param  hi2c Pointer to a I2C_HandleTypeDef structure that contains

*                the configuration information for the specified I2C.

* @param  DevAddress Target device address: The device 7 bits address value

*         in datasheet must be shifted to the left before calling the interface

* @param  pData Pointer to data buffer

* @param  Size Amount of data to be sent

* @param  Timeout Timeout duration

* @retval HAL status

*/

意思就是函数在使用datasheet中的7位I2C地址时,必须先左移一位。所以使用

HAL_I2C_Master_Transmit()

对PCF8574AT进行写操作时地址就是0x7E,读操作时地址就是0x7F。

如果我们希望单独操作某个IO(P7-P0),就对那个bit进行单独写1或者清0即可(STM HAL库)。

#define Write_Add_LCD 0x7E
#define Read_Add_LCD 0x7Fuint8_t val;
HAL_I2C_Master_Receive (&hi2c1, Read_Add_LCD,&val, 1, 1000);
val |= 1<<3; //P3 bit置1
HAL_I2C_Master_Transmit (&hi2c1, Write_Add_LCD,&val, 1, 1000);HAL_I2C_Master_Receive (&hi2c1, Read_Add_LCD,&val, 1, 1000);
val &= ~(1<<3); //P3 bit清0
HAL_I2C_Master_Transmit (&hi2c1, Write_Add_LCD,&val, 1, 1000);

(注:为避免同一总线上I2C地址冲突,对A0/A1/A2电平进行配置,可以有8种不同地址的选择)

PCF8574AT的I2C地址和单独IO操作相关推荐

  1. IO操作和DMA、RDMA

    用户进程想要执行IO操作时(例如想要读磁盘数据.向磁盘写数据.读键盘的输入等等),由于用户进程工作在用户模式下,它没有执行这些操作的权限,只能通过发起对应的系统调用请求操作系统帮忙完成这些操作.这里因 ...

  2. python之协程与IO操作

    协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...

  3. 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码

    目录 1.根据传入坐标和图片URL地址对图片进行切图操作 2.将图片转化成Base64位编码.根据传入坐标 算出切点坐标 在开发过程的学习记录,此两个工具类主要是对图像的处理(切图),对文件的想换转化 ...

  4. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能. 幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复造轮子了. 1 ...

  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作

    1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...

  6. 最全的IO操作知识总结

    模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStream; ...

  7. Tensorflow线程队列与IO操作

    目录 Tensorflow线程队列与IO操作 1 线程和队列 1.1 前言 1.2 队列 1.3 队列管理器 1.4 线程协调器 2 文件读取 2.1 流程 2.2 文件读取API: 3 图像读取 3 ...

  8. 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

    第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...

  9. C++之文件IO操作流

    C++之文件IO操作流 前两节介绍了C++的IO流类库,标准设备IO操作流中部分预定义流对象的成员函数以及IO格式控制.那今天我将继续介绍关于C++中的流操作内容--文件IO操作流fstream.并会 ...

最新文章

  1. python绘制曲线图-python怎么画曲线图
  2. hdu 1116 Play on Words(欧拉通路)
  3. python-os模块
  4. 最短路径(Dijkstra、Bellman-Ford和SPFA算法)
  5. Java 程序优化:字符串操作、基本运算方法等优化策略
  6. 163邮箱:退信代码(对照表) - 说明篇
  7. 多地GitHub账号使用受限;Python之父考虑重构解释器;62岁程序员埋逻辑炸弹 | 开发者周刊...
  8. 实现UniqueAttribute唯一性约束-优化版
  9. centos6.5解决方案-1
  10. 置换元素和非置换元素
  11. linux开源监控工具,十款开源免费监控软件
  12. Java文件上传之断点续传解决方案
  13. html设计学校网站,html学校网站
  14. php微信开发计数,总结一个微信开发的过程实例
  15. 前端promise、async重点总结
  16. 微信亲戚备注分组名称_【微信分组备注名称大全】qq分组备注名称大全
  17. 计算机设计大赛国赛演讲稿
  18. 计算机c盘中用户文件夹内的文件改名,Win10-更改c盘下的用户文件夹名
  19. 使用Python将OV7725的RGB565图像数据转换为jpg图像
  20. Thinkphp——hook类行为扩展

热门文章

  1. 对P5基本二维图像绘制库的交互性扩展
  2. 第二阶段--团队冲刺--第三天
  3. LitJson问题汇总
  4. 软件著作权申请材料及申请流程?
  5. 浙江大学 计算机学院的博士,通知 | 浙江大学第377期博士生创新论坛 暨计算机学院第十六届博士生创新论坛(秋冬)报名通知...
  6. c++使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现
  7. 国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践
  8. 很牛的求职经历(转)
  9. 计算机总是提示网络电缆没有插,网络电缆没有插好原因与解决方法【图文教程】...
  10. 计算机无法自动排列,Win10电脑如何设置文件夹不再自动排列|取消电脑文件夹自动排列的方法...