STM32基础篇:I2C通信协议

I2C总线

I2C(IIC---Inter Integrated Circuit  内部集成电路)

以上为I2C大体结构图,其中时钟线SCL用于传输时钟信号,数据线SDA来传输实际的数据。


主机与从机

1.主机的职责

假如由从机1和从机2,从机1想向SDA上发送一个低电平,从机2想向SDA上发送一个高电平,如此同一时刻就会发生冲突。为了避免冲突的发送,必须对总线的使用情况做一个管理。

我们规定:在同一时刻,只允许有一个设备向外去发送数据。此规则由主机负责管理,因此主机相当于I2C总线的管理员。


1、波特率的选择

I2C总线中,由主机产生SCL信号,通过SCL线分配给所有从机。因此主机可以通过控制时钟信号频率来调节波特率(即:控制通信速度)。

2、数据通信的方向

仅又主机可以主动向从机发起数据传输,从机不能主动向主机发送数据,必须等待主机读取从机时,从机才能把准备好的数据发送给主机。

传输方向有:主机-->从机、从机-->主机,不存在从机-->从机。


2.数据接收和发送

每个从机都有一个8位的地址,且地址最后一位X的取值代表读(1)或写(0);

主机在总线上发送地址后才能与对应的从机通信,且通信开始与结束都由主机决定;

当SCL为高电平时,SDA上的数据是不允许变化的,因为SCL在高电平时采集数据(起始、停止除外)。


3.I2C数据帧格式

空闲:SCL和SDA均为高电平。

起始位:当SCL为高电平时,SDA由1置0;

停止位:当SCL为高电平时,SDA由0置1;

应答ACK:主机每向从机发送一帧数据后,会立刻释放掉SDA占控权,此时SDA为高电平;随后从机立刻发送一个低电平,表示“收到”。同样,主机接收到从机发送的数据后,也会向从机发送ACK,表示接收到了。


I2C模块简介

在STM32内部有两个I2C模块(即I2C1、I2C2),挂在APB1总线上。每个I2C模块有三个引脚,分别为:SCL、SDA、SMBA;本文不涉及SMBA引脚的讲述。

如下为I2C引脚的重映射(C8T6为例):

复用功能Remap=0Remap=1
I2C1_SCLPB6PB8
I2C1_SDAPB7PB9
I2C1_SMBAPB5
I2C2_SCLPB10/
I2C2_SDAPB11/
I2C2_SMBAPB12/

寄存器组与内部结构

1.内部结构

如下为I2C内部结构框图:

不管是I2C1还是I2C2,这两个片上外设的时钟都来自于PCLK1,顺着时钟往里走,有个SCL控制电路模块,将PCLK1转换为SCL信号,并且通过配置CCR来控制SCL的频率以及形状

对于SDA,其结构与USART类似,具有双缓冲结构(图中绿色部分)。


2.I2C的初始化

首先将SDA、SCL引脚设置为开漏模式(实现“线与”),然后开启I2C时钟,配置寄存器参数,最后闭合总开关。


3.速度模式

对于I2C的时钟信号,有5种速度(频率)可选择,如下:

速度模式波特率max
标准模式(Sm)100K
快速模式(Fm)400K
快速增强模式(Fm+)1M
高速模式(HSm)3.4M
超快速模式(UFm)5M

而对于STM32,只有标准模式和快速模式,即波特率最大为400K。


一些标志位

BUSY标志位:用于查询总线的空闲状态,0-总线空闲、1-总线忙碌。

START位:用于产生一个起始位,写1-产生起始位、产生后START自动置0。

STOP位:用于产生一个停止位,写1-产生停止位、写0-无停止位。当STM32作主机接收从机数据时,当发送完NAK信号后,要立刻发送停止位。

SB标志位:用于检测起始位是否发送完成,0-没有发生完成、1-发生完成。

AF、ADDR标志位:当寻址或数据发送成功时,ADDR=1(相当于收到ACK信号)、寻址或数据发送失败,AF=1(相当于收到NAK信号)。

在使用AF之前,通常要先对其清零。对于ADDR,当我们先读取SR1寄存器,再读取SR2寄存器后,就会清除ADDR(不要问为什么,ST公司就是这么设计的)

TxE标志位:1-发送数据寄存器TDR为空、0-TDR里面还有待发送的数据。

RxNE标志位:1-接收数据寄存器RDR非空,0-RDR为空。

BTF标志位:发送数据时:1-TDR和移位寄存器均为空,代表数据发送完成、0-数据未发送完成;接收数据时:1-RDR和移位寄存器均非空、0-相反。

ACK位:将ACK位写1-STM32芯片发送出ACK信号,写0-则发送NAK信号。注意,ACK只发送在正在进入移位寄存器或即将进入移位寄存器的字节之后。


I2C通信接收数据的一般流程:

I2C通信发生数据的一般流程:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395092.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java二十三种设计模式-桥接模式(10/23)

桥接模式:解耦抽象与实现的灵活设计 引言 桥接模式(Bridge Pattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼,我阅读了大量博文。不敢说完全吃透,但是在做一件什么事,可以通过下面这文章来理解,我读了不下五遍。并整理标准重点,添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭,转眼间已经来到了2024年的立秋,在这个数字技术快速发展的时代,电脑录屏技术已经成为了一项不可或缺的技能,无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢?接下来,…

Apache Tomcat 7下载、安装、环境变量配置 详细教程

Apache Tomcat 7下载、安装、环境变量配置 详细教程 Apache Tomcat 7下载Apache Tomcat 7 安装Apache Tomcat 7 环境变量配置启动 Apache Tomcat 7测试Tomcat7是否启动成功 Apache Tomcat 7下载 1、下载地址,找到Archives 链接: 官网下载地址 2、找到Tomcat 7&…

二进制分组背包优化

前言&#xff1a;好久没有写分组背包了&#xff0c;写一个二进制优化的背包练练手 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;#define int long long int n,w; const int N (int)1e7; struct node{int value,weight; }sto[N]; int d…

【数据链路层】ARP协议

文章目录 以太网以太网帧对的格式 MAC地址对比MAC地址和IP地址 MTU和MSSARP协议ARP协议的工作原理ARP欺骗 以太网 ”以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输…

nuxt3实战:完整的 nuxt3 + vue3 项目创建与useFetch请求封装

一. 安装 pnpm dlx nuxilatest init <project-name>// ornpx nuxilatest init <project-name>如遇到报错 手动安装&#xff1a; 浏览器访问报错https请求地址&#xff1a; 点击tar(项目初始文件的下载地址)对应地址,下载starter-3.tar.gz 包到本地 本地创建项…

AskYourDatabase v1.1.83 使用人工智能连接您的数据库并与您的数据聊天

AskYourDatabase 是一个创新的 平台 它允许用户直接连接到您的数据库并与您的数据聊天 。这个革命性的工具使用人工智能来提供答案和分析&#xff0c;日常开发中可以用来帮助开发者编写sql脚本&#xff0c;分析数据结构等。支持市面上流行的数据库。后端数据库开发的又一利器&a…

Go语言加Vue3零基础入门全栈班15 gin+gorm+vue3用户管理系统实战录播课 2024年08月04日 课程笔记

预览 登录页面&#xff1a; 首页&#xff1a; 用户列表&#xff1a; 新增用户&#xff1a; 删除用户&#xff1a; 暗黑模式&#xff1a; 概述 如果您没有Golang的基础&#xff0c;应该学习如下前置课程。 01 Golang零基础入门课_20240726_149元02 Golang面向对象…

Open3D 三维重建-Poisson Surface Reconstruction (泊松曲面重建)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用 二、代码实现 2.1关键函数 2.1.1函数代码 2.1.2参数详解 2.1.3名词解释 2.2完整代码 三、实现效果 3.1原始点云 3.2重建后点云 3.3去除低密度点云 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点…

Linux快速切换/完善内核

看到标题就晓得是为啥而写的吧&#xff0c;没错&#xff0c;它就是记录Linux的内核切换的一些常见问题&#xff0c;尽可能把平时一些经验和真实有效的心得写下来&#xff0c;同时也希望可以给需要切换内核版本的大伙带来方便&#xff0c;感受到"小小内核切换"竟然如此…

某赛通电子文档安全管理系统 CDGAuthoriseTempletService1 SQL注入漏洞复现(XVE-2024-19611)

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

高效的编程学习方法和技巧

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…

关于区块链的公共医疗应用开发

区块链的养老保险平台应用开发 任务一:环境准备 1.编译区块链网络 目录:/root/xuperchain/ 在区块链网络目录下执行make命令,编译网络,编译成功后输出compile done! 启动区块链网络 2.创建钱包账户 创建普通钱包账户userTest,命令如下 bin/xchain-cli account newke…

【linux|001】Unix和Linux的关系 及 它们的发展历史

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

win7系统postman11.7错误:无法定位程序输入点DiscardVirtualMemory于动态链接库KERNEL32.dlI 上

目录 前言&#xff1a;环境描述 一、问题描述 二、问题定位 三、解决方案 1、卸载最新版&#xff0c;安装原来可用的旧版 2、postman禁止自动更新 四、错误的解决方案 1、重启电脑 2、以为是 KERNEL32.dlI 丢失 3、注册 kernel32.dll 4、使用Windows自带的系统文件检…

PPT免费图片素材网站分享

一、Pixabay 网址&#xff1a;https://pixabay.com/ 图片类型&#xff1a;高清、免费、商用 使用方法&#xff1a;找到想要的图片之后&#xff0c;右键复制之后粘贴到PPT即可使用。同时&#xff0c;点击下载可以找到不同尺寸的PPT素材 二、花瓣网 网址&#xff1a;https://…

mysql事务与索引

1.事务 &#xff08;1&#xff09;提出背景&#xff1a; 在日常开发环境中&#xff0c;有一些场景是需要“一气呵成”完成某一个操作。 eg&#xff1a;银行转账的场景&#xff1a;张三&#xff08;手里有1000&#xff09;现要给李四&#xff08;手里有500&#xff09;转500&…

零基础5分钟上手亚马逊云科技AWS核心云开发/云架构 - 创建高可用数据库集群

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家零基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我将每天介绍一个基于亚马逊云科…

Go开发后端和Vue3开发前端的前后端分离框架中自己手戳一个OA流程审批、工作流引擎给新时代一个漂亮便捷的工作流引擎

前言 在软件项目开发中&#xff0c;我们都会接触到流程审批的需要业务&#xff0c;我们以往用的最多就是如下图这种流程编辑引擎插件&#xff1a; 以上截图中的流程工具是不是大家常见的呀&#xff01;感觉很丑拿不出手呀&#xff01;在当前行业内卷及竞争激烈情况下&#xff…