撑腰会儿:I2C通信协议介绍​zhuanlan.zhihu.com

上文介绍了I2C协议的基本结构,今天,使用STM32和LM75A温度传感器来实现I2C读取信息。

首先,为了使用I2C读取传感器测量数据,需要先通过传感器数据手册来确定从机地址和所需寄存器地址。

模块中A2,A1,A0均接地,所以设备从机地址为0x48。由于I2C协议中地址为七位,地址后一位位读/写标志位,因此在使用地址时需要将其左移一位即0x90。

对于它内部寄存器,有以下寄存器表。在初始化阶段,需要将其Conf寄存器置零表示传感器在默认模式下进行工作。在读取传感器数据时(温度数据),读取Temp寄存器值,注意,这里Conf寄存器有16位,在读取需要连续读取两个字节数据。

在读取传感器数据时,参考以下Temp寄存器,LSB的0~4位无数据,所以真实数据需要右移五位。得到寄存器的值乘0.125即为当前温度值。

下面来进行实际操作,使用STM32CubeMX进行初始化配置。

使用I2C1来进行传感器数据的接收,首先配置复用GPIO口,然后配置I2C参数(速率,地址位数等),接着配置时钟为外部时钟,生成MDK工程即可。

编写传感器函数,包括写一个字节,读两个字节数据,初始化和计算温度,下面是头文件和源文件。

LM75A.h

#ifndef _LM75A_H

LM75A.c

#include 

在主函数中,将读出传感器数据一秒钟进行一次打印,用手指压住温度传感器芯片,观察打印温度变化。

arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据相关推荐

  1. arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO

    作者:爪爪熊 链接:https://www.jianshu.com/p/0495c0554a63 來源:简书 之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果 ...

  2. arduino i2c 如何写16位寄存器_Arduino之我见

    Arduino是一款时尚流行的开源软件&硬件平台,其开发入门简单,是众多DIY玩家及创客的首选.目前,Arduino也开始进入了中小学的创客课程.然而在与很多玩家.学生或是创客老师交流的过程中 ...

  3. arduino i2c 如何写16位寄存器_Arduino只是拿来玩的?你错了!教你用它自制一个非常实用的小产品|智能灌溉控制器...

    利用动态水循环,具有下雨探测,日出探测功能,智能灌溉你的院子或花园. 一定要看文章最后哦,结尾有惊喜! 部件和材料 Arduino NANO开发板 1块 IO扩展板 1块 IO扩展模块包 1套 app ...

  4. arduino i2c 如何写16位寄存器_arduino入门

    硬件:Arduino Uno是基于ATmega328P(数据表)的微控制器板.它具有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入,工作电压5v,输入电压7-12v. 串行:0(R ...

  5. I2C总线时序图: 8位设备地址 16位寄存器地址 16位数据

    有关I2C总线时序,下面的文章写得很好,推荐阅读 https://www.cnblogs.com/BitArt/archive/2013/05/28/3103917.html#commentform ...

  6. 汇编语言——16位寄存器实现32位二进制数左移4位。

    问题描述 16位寄存器实现32位二进制数左移4位. 源代码 MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL 说明:  ...

  7. 读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。

    #define EE_TYPE AT24C64 如下图所示,往EEPROM的地址0x1000.0x1001.0x1002和0x1003分别写入0xAA.0xBB.0xCC和0xDD,读出来的数据都是最 ...

  8. stm32芯片休眠模式_基于STM32单片机低功耗模式机制详细解析

    相关推荐 创新的 RXv3 核大幅提升了久经验证的瑞萨电子 RX CPU 核架构性能,实现了高达 5.8 Co... 发表于 2018-10-25 14:54 • 0次阅读 RXv3核实现了5.8 C ...

  9. stm32万年历流程图_基于STM32的电子万年历系统设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 的电子万年历系统设计 作者:刘磊 来源:<科技资讯> 2015 年第 01 期 摘 要:电子万年历是集时间.日 ...

最新文章

  1. 写一篇C语言入门第一讲
  2. php 类加载其它类,php 类自动载入的方法
  3. 关于 golang 代理设置的
  4. Android APK反编译得到Java源代码或资源文件
  5. hdu 1404/zoj 2725 Digital Deletions 博弈论
  6. Paper:2020年3月30日何恺明团队最新算法RegNet—来自Facebook AI研究院《Designing Network Design Spaces》的翻译与解读
  7. python意外缩进引发逻辑错误_python – IndentationError:意外的缩进错误
  8. python获得距离指定(x,y)固定距离的全部坐标点
  9. SVN clean失败解决方法
  10. iOS中如何旋转UIView
  11. 龙族幻想最新东京机器人位置_龙族幻想:最强“人形兵器”格斗家降临卡塞尔学院...
  12. oracle tbs_tmp,Oracle 12.2 设置LOCAL_TEMP_TABLESPACE
  13. 强人工智能:抑制神经元的意义
  14. sql查询按周查询出现的跨年问题
  15. 爬虫项目实操四、用Scrapy爬取招聘网站的招聘信息
  16. Android 锁屏,息屏情况下打开界面Activity,类似微信视频通话接电话时弹出接电话的界面
  17. NYOJ1016(德莱联盟)(判断线段相交)
  18. Netapp 两节点双活VS本地HA
  19. 甲基化系列 1. 甲基化之前世今生(Methylation)
  20. 灾备系统与备用服务器区别,服务器灾备方案是什么

热门文章

  1. 雾霾模糊?图像增强教你如何去雾
  2. 云小课 | 华为云KYON之VPC终端节点
  3. “动态规划”这词太吓人,其实可以叫“状态缓存”
  4. 详解GaussDB(DWS) explain分布式执行计划
  5. 华为云文字识别服务产品优势、应用场景、典型案例和未来之路(OCR系列三)
  6. Python批量运行Gprmax仿真并快速提取雷达波走时和振幅
  7. MacOS12+SublimeText+Skim无法正常跳转Skim的问题与解决
  8. Neo4j fails creating index,创建索引失败
  9. pip下载慢的解决方法
  10. 优达学城深度学习之六——TensorFlow卷积神经网络