【STM32】入门(六):I2C协议

2023-05-16

【STM32】STM32单片机总目录

1、常见I2C设备

EEPROM
温湿度传感器,例如:AHT10
电量计,例如:TI的BQ34Z100
日历时钟
模数或数模转换器

2、I2C总线结构

  • I2C只有两根线:数据线SDA和时钟线SCL;
  • SDA 和 SCL 都是双向线路
  • I2C设备并联在I2C总线上
  • 每个设备都有一个地址,一根总线上的设备地址不能有重复的
  • 地址长度为7位或10位
  • 7位I2C总线可以挂接127个不同地址的I2C设备,0号"设备"作为群呼地址,并且总线电容不超过400PF
  • I2C设备分为主机、从机
  • 同一总线上可以有多个主机(控制器)
  • 通讯速率:标准模式100kbit/s 、快速模式 400kbit/s、高速模式3.4Mbit/s
  • 7位I2C总线可以挂接127个不同地址的I2C设备,0号"设备"作为群呼地址
  • 10位I2C总线可以挂接更多的10位I2C设备.
    在这里插入图片描述
    在这里插入图片描述

3、协议层

传输协议分类:读、写、复合

3.1 读操作

在这里插入图片描述
阴影部分:主机 发送
非阴影部分:从机 发送

S:起始
SLAVE ADDRESS:从机地址
读写标志:这里是‘1’表示读
第一个A:从机应答
DATA:从机发来的数据
第二个A:主机应答
A上一杠:非应答
P:停止

3.2 写操作

在这里插入图片描述
阴影部分:主机 发送
非阴影部分:从机 发送

S:起始
SLAVE ADDRESS:从机地址
读写标志:这里是‘0’表示写
第一个A:从机应答
DATA:主机发来的数据
第二个A:从机应答
A上一杠:非应答
P:停止

3.3 复合操作

复合操作就是一次性可以执行多次读、多次写,并且读和写是交替进行。
在这里插入图片描述
阴影部分:主机 发送
非阴影部分:注意——此时非阴影不一定都是从机发送,而是根据读写位来决定,后面的数据是主机发送还是从机发送。

S:起始
SLAVE ADDRESS:从机地址
读写标志:这里可以是‘0’表示写、或者‘1’表示读
P:停止

3.4 起始、停止信号

在这里插入图片描述
当时钟线SCL 是高电平时,数据线SDA 线从电平向电平切换,表示通讯的起始
当时钟线SCL 是高电平时, 数据线SDA线由电平向电平切换,表示通讯的停止

3.5 从机地址

从起始位开始的第一个字节的头 7 位组成了从机地址,I 2 C 总线委员会协调 I 2 C 地址的分配,几种特别的地址如下:
在这里插入图片描述

3.6 数据有效

在这里插入图片描述
时钟线SCL为电平的时候,数据线SDA才有效

SDA 为高电平时表示数据“1”,
SDA 为低电平时表示数据“0”。

时钟线SCL为电平的时候,数据线SDA 无效( 一般在这个时候 SDA 进行电平切换)

3.7 响应

在这里插入图片描述

响应包括“应答 (ACK)”和“非应答 (NACK)”两种信号。
无论主、从机,作为数据接收端时,接收到 I2C 传输的一个字节数据或地址后:

若希望对方继续发送数据,则需要向对方发送“应答 (ACK)”信号,
	发送方会继续发送下一个数据;
若接收端希望结束数据传输,则向对方发送“非应答 (NACK)”信号,
	发送方接收到该信号后会产生一个停止信号,结束信号传输。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32】入门(六):I2C协议 的相关文章

  • 138-基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真+源程序

    资料编号 138 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 LED灯 蜂鸣器 电位器 制作一个基于stm32单片机汽车多功能仪表盘显示系统Proteus仿真 2 通过DHT1
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • 为什么我只收到第一个地址字节? (I2C协议)

    期望从机确认并返回数据 但它没有 这是我的协议 这是我的数据表 数据表提到 从机将通过首先发送 MSB 字节来应答 Byte0 和 byte1 包含 预测值 所有字节均由主机确认 Edit 源库 另外仅供参考 我使用的是 Arduino F
  • 匹配 STM32F0 和 zlib 中的 CRC32

    我正在研究运行 Linux 的计算机和 STM32F0 之间的通信链路 我想对我的数据包使用某种错误检测 并且由于 STM32F0 有 CRC32 硬件 并且我在 Linux 上有带有 CRC32 的 zlib 所以我认为在我的项目中使用
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • VS Code 有没有办法导入 Makefile 项目?

    正如标题所说 我可以从现有的 Makefile 自动填充 c cpp properties json 吗 Edit 对于其他尝试导入 makefile 的人 我找到了一组脚本 它们完全可以实现我想要实现的目标 即通过 VS Code 管理
  • 在 Atollic TrueStudio、STM32CubeMX 中导入 C 库

    我目前正在开发 STM32F767ZI Nucleo 板和一个小安全芯片 microchip atecc508a 通过 i2c 连接进行连接 该芯片有一个可用的库加密验证库 https github com MicrochipTech cr
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • Windows IoT 和 DS3231 RTC 时钟

    对于我的项目 我需要当前时间和日期 不幸的是 当 RP2 关闭时 它就会失去一切 接下来的事情是 我将没有互联网连接来使用 NTP 为此 我需要实现 DS3231 RTC 模块 所有设备的通信都通过 I2C 运行 Raspberry Ard
  • 在 Raspberry Pi 上使用 Python smbus - 与语法混淆

    我正在尝试在 Raspberry Pi 上使用 python smbus 使用 I2C 与 MMA7660 加速计芯片进行通信 在下面的代码中 我正在读取芯片的寄存器 0x 00 0x01 0x02 和 0x03 并且我得到的值完全相同 查
  • systick定时器

    systick定时器 文章目录 前言 一 前期疑惑 二 解答 1 关于systick是阻塞的吗 2 非阻塞 三 软件编写 总结 前言 这边记录systick相关知识点 一 前期疑惑 在学习systick志气啊 其实对于systick还是一脸
  • Cortex-M3与M4权威指南

    处理器类型 所有的ARM Cortex M 处理器是32位的精简指令集处理器 它们有 32位寄存器 32位内部数据路径 32位总线接口 除了32位数据 Cortex M处理器也可以有效地处理器8位和16位数据以及支持许多涉及64位数据的操作
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • 使用 STM32 USB 设备库将闪存作为大容量存储设备

    我的板上有这个闪存IC 它连接到我的STM32F04 ARM处理器 处理器的USB端口可供用户使用 我希望我的闪存在通过 USB 连接到 PC 时被检测为存储设备 作为第一步 我在程序中将 USB 类定义为 MSC 效果很好 因为当我将主板
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb

随机推荐

  • FreeRTOS系列|任务基础知识

    任务基础知识 1 多任务系统 1 1 前后台系统 单片机裸机开发时 xff0c 一般都是在main函数里面用while 1 做一个大循环来完成所有的处理 xff0c 循环中调用相应的函数完成所需的处理 有时也需要在中断中完成一些处理 相对于
  • 链表《5》使用链表实现学生成绩管理系统

    上次我使用动态数组结构体实现了学生成绩管理系统 xff1a http blog csdn net u010105970 article details 17752193 这次学习了链表对链表也有所了解 xff0c 我就想着用链表实现学生成绩
  • 得到一个数字中每一位的数字

    学习编程也有一段时间了 xff0c 随着学习的不断深入 xff0c 我越来越体会到了算法的重要性 xff0c 最近遇到了一些非常有意思的算法 xff0c 比如打印水仙花数 将数字逆置 xff0c 在这两个算法中会用到一个数字钟每一位的值 如
  • 使用C++实现学生管理系统

    我在前面的博客中分别使用C语言的动态数组和链表实现了学生成绩管理系统 xff0c 最近正好在学习C 43 43 xff0c 于是我便使用C 43 43 实现了学生成绩管理系统 xff0c 算法和前面的C语言的动态数组实现的学生成绩管理系统差
  • 制作一个简单的Android版的音乐播放器

    音乐播放器是一个非常常见的应用 xff0c 这篇博客就是介绍如何制作一个简单的音乐播放器 xff0c 这款音乐播放器具有以下的功能 xff1a 播放歌曲 暂停播放歌曲 显示歌曲的总时长 显示歌曲的当前播放时长 调节滑块可以将歌曲调节到任何时
  • 使用Less

    为什么要使用预处理CSS 在使用CSS过程中会遇到一个非常头疼的问题 xff0c 因为CSS中没有像java C 43 43 或者PHP等程序语言一样有有自己的变量 常量 条件语句以及一些编程语法 xff0c 只是一行行单纯的属性描述 xf
  • 使用Gulp

    为什么要使用Gulp 在前端开发中通常需要做 xff0c 预处理语言的编译 js文件的压缩 css文件的压缩 图片的压缩等一系列工作 xff0c 而使用Gulp可以自动化的完成这些工作 xff0c 从而提高网站的开发效率 xff0c 在我的
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • CMakeList的基本写法

    最近需要自己写CMakaList xff0c 所以简要写一下一些基本的操作 为图实用 xff0c 只写了常用的简单操作 1 确定cmake最低版本需求 span class hljs function span class hljs tit
  • SLAM的一点认识

    SLAM的一点认识 本人邮箱 xff1a sylvester0510 64 163 com xff0c 欢迎交流讨论 xff0c 欢迎转载 xff0c 转载请注明网址http blog csdn net u010128736 一 我与SLA
  • ORB-SLAM2详解(六)闭环检测

    ORB SLAM2详解 xff08 六 xff09 闭环检测 本人邮箱 xff1a sylvester0510 64 163 com xff0c 欢迎交流讨论 xff0c 欢迎转载 xff0c 转载请注明网址http blog csdn n
  • FreeRTOS系列|任务创建和删除

    任务创建和删除 1 任务创建和删除API函数 xTaskCreate 函数 xff1a 动态创建一个新的任务 xff0c 每个任务都需要RAM来保存任务状态 任务控制块 43 任务栈 xff0c 此接口采用动态分配内存资源 BaseType
  • 深度学习如何做特征工程?

    深度能自动获取特征 只是对某些领域而言的 实际上深度学习只是能自动对输入的低阶特征进行组合 变换 xff0c 得到高阶特征 对于图像处理之类的领域来说 xff0c 像素点就可以作为低阶特征输入 xff0c 组合 变换得到的高阶特征也有比较好
  • Git:《Git学习视频》学习笔记

    视频地址 xff1a 黑马程序员 Git学习视频 目录 xff1a 一Git介绍二Git与SVN的区别 速度结构其他 三Git基本命令的使用掌握 如何学习git指令常见命令单人开发配置帐号信息一般只需配置一次全局帐号即可查看日志起别名版本回
  • 海康云台摄像机 ISAPI 的签名机制与语音传输

    由于海康HikVision Hik 平台摄像机的SDK不支持Arm Linux平台 xff0c 为了跨平台的兼容性 xff0c 只能使用ISAPI作为控制或接收相机数据的方式 xff0c ISAPI是Hik的一套HTTP通信协议 xff0c
  • 无人机中的坐标系与相机姿态计算

    球坐标系 球坐标系是三维坐标系中的一种 xff0c 在无人机中一般使用球坐标系来表示相机姿态 xff0c 相机姿态的坐标是相对于无人机的 xff0c 而无人机的飞行姿态则是相对于大地坐标系的 这里我们使用的相机是2自由度的相机 xff0c
  • 【Ubuntu】安装中文输入法、终端不支持中文的解决方法

    一 中文输入法安装 1 安装汉语语言包 sudo apt install fcitx sudo apt install language pack zh hans 2 安装google拼音输入法 sudo apt install fcitx
  • 【Qt】QtCreator中配置clang-format

    1 安装clang format sudo apt install clang format 2 添加插件Beautifier 在QtCreator gt Help gt About Plugins 中添加插件Beautifer 添加后要重
  • 【TX2】TX2开发板系统默认串口有ttyS0(调试口)、ttyTHS1、ttyTHS2、ttyTHS3,通过修改设备树文件,可以新增三个串口

    1 简述 TX2开发板系统默认串口有ttyS0 调试口 ttyTHS1 ttyTHS2 ttyTHS3 通过修改设备树文件 可以新增三个串口 2 设备树 设备树中关于串口部分的描述 2 1 基础配置 注意 在这里状态都配置成禁止 statu
  • 【STM32】入门(六):I2C协议

    STM32 STM32单片机总目录 1 常见I2C设备 EEPROM 温湿度传感器 xff0c 例如 xff1a AHT10 电量计 xff0c 例如 xff1a TI的BQ34Z100 日历时钟 模数或数模转换器 2 I2C总线结构 I2