STM32F407 IIC通信
1、IIC 介绍
IIC(Inter-Integrated Circuit)总线是一种由数据线 SDA 和时钟线 SCL 构成的两线式串行总线,可发送和接收数据,常用于 MPU/MCU 与外部设备连接通信、数据传输。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。因为 IIC 协议比较简单,常用GPIO 来模拟 II C时序,这种方法称为模拟 IIC。
IIC 总线的特点:
- 一主多从:IIC 协议允许多个“从机”芯片和一个或更多的“主机”芯片进行通讯。这种通信模式使得一个微控制器可以轻松地与多个外围设备通信,连接到总线的接口数量只由总线电容 400pF 的限制决定。
- 两根线:IIC 通信仅需要两根信号线来完成信息交换,即 SCL 时钟信号线和 SDA 数据输入/输出线。这种简化的硬件接口降低了系统的复杂性和成本。
- 半双工:IIC 通信是半双工的,说明数据可以在两个方向上传输,但同一时刻只能在一个方向上传输。这限制了数据的传输速率,但满足大多数低速外围设备的需求。
- 同步通信:IIC 是一种同步通信协议,发送端在发送串行数据的同时提供一个时钟信号。接收端根据发送端提供的时钟信号接收数据,这确保了数据的准确性和一致性。
- 总线上数据的传输速率在标准模式下可达 100Kbit/s,在快速模式下可达 400Kbit/s,在高速模式下可达 3.4Mbit/s。
2、模拟 IIC 的时序

- 空闲状态:当 IIC 总线不处于通信状态时,SDA 和 SCL 两条信号线同时处于高电平,这被定义为总线的空闲状态,即释放总线。
- 开始信号:当 SCL 为高期间,SDA 由高到低的跳变。这个信号标志着通信的开始,并使所有从机变为活动状态,等待接收地址位。
- 停止信号:当 SCL 为高期间,SDA 由低到高的跳变。这个信号标志着通信的结束。
- 应答信号:在 IIC 通信中,每传输一个字节后,接收端会发送一个应答信号来告知发送端数据是否接收成功。当主机发送了 8 位数据后,也就是在第 9 个时钟周期会再产生一个时钟,此时主机放开 SDA 的控制,读取 SDA 电平, 在上拉电阻的影响下,此时SDA默认为高,必须从机拉低, 以确认收到数据。应答信号为低电平时表示有效应答(ACK),高电平时表示非应答(NACK)。

3、模拟 IIC 传输流程
- SDA 和 SCL 开始都为高, 然后主机将 SDA 拉低, 表示开始信号;
- 在接下来的 8 个时间周期里,主机控制 SDA 的高低, 发送从机地址。 其中第 8 位如果为0, 表示接下来是写操作,即主机传输数据给从机; 如果为 1,表示接下来是读操作,即从机传输数据给主机;注意,数据传输方式为 MSB,即从最高位到最低位。
- 总线中对应从机地址的设备,发出应答信号;
- 在接下来的 8 个时间周期里,如果是写操作,则主机控制 SDA 的高低;如果是读操作,则从机控制 SDA 的高低;
- 每次传输完成, 接收数据的设备, 都发出应答信号;
- 最后, 在 SCL 为高时, 主机由低拉高 SDA, 表示停止信号,整个传输结束;

4、模拟 IIC 的实现代码
4.1、GPIO 引脚定义与初始化
IIC 的SCL 和 SDA 引脚在 iic.h 中定义:
/* 定义 I2C 引脚 */
#define I2C_SCL_PIN GPIO_Pin_6
#define I2C_SDA_PIN GPIO_Pin_7
#define I2C_GPIO_PORT GPIOB
#define I2C_RCC_CLOCK RCC_AHB1Periph_GPIOB/* I2C SDA 或 SCL 引脚拉高或拉低 */
#define SCL_H() GPIO_SetBits(I2C_GPIO_PORT, I2C_SCL_PIN)
#define SCL_L() GPIO_ResetBits(I2C_GPIO_PORT, I2C_SCL_PIN)#define SDA_H() GPIO_SetBits(I2C_GPIO_PORT, I2C_SDA_PIN)
#define SDA_L() GPIO_ResetBits(I2C_GPIO_PORT, I2C_SDA_PIN)
IIC 的 GPIO 则在 iic.c 文件中初始化:
相关文章:
STM32F407 IIC通信
1、IIC 介绍 IIC(Inter-Integrated Circuit)总线是一种由数据线 SDA 和时钟线 SCL 构成的两线式串行总线,可发送和接收数据,常用于 MPU/MCU 与外部设备连接通信、数据传输。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。因为 IIC 协议比较简单…...
【论文阅读方法】沐神课程:如何读论文
一篇论文的一般结构 titleabstractintroductionmethodexperienceconclusion 三明治论文阅读法 第一遍:海选 titleabstractconclusion——确定要不要读第二遍:精读 对整个文章过一遍,知道每一块在做什么 可以从标题开始读到最后,注…...
机器人基础知识
在机器人学中,“inverse dynamics”(逆动力学)和 “forward dynamics”(正向动力学)是两个核心概念,它们帮助我们理解和计算机器人如何移动以及需要应用什么样的力来实现这些移动。 Inverse Dynamics&#…...
jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.
无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样,还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…...
Python高级算法与数据结构优化实战
Python高级算法与数据结构优化实战 在算法竞赛中,掌握高级优化技巧和数据结构实现可以显著提升解题效率和代码性能。本文深入探讨Python中常见算法问题的高效实现方法,通过实际比赛案例展示如何优化时间复杂度和空间复杂度。 一、前缀和与差分数组 前缀和与差分数组是算法…...
使用 Excel 实现绩效看板的自动化
引言 在日常工作中,团队的绩效监控和管理是确保项目顺利进行的重要环节。然而,面临着以下问题: 数据分散:系统中的数据难以汇总,缺乏一个宏观的团队执行情况视图。看板缺失:系统本身可能无法提供合适…...
Tomcat新手登峰指南:从零到部署的原子化实践
开篇:为什么选择Tomcat? 2024年StackOverflow调查显示,Tomcat以68.9%占有率蝉联Java Web服务器榜首。但新手常陷入三大误区: 直接使用IDE内置Tomcat导致生产环境配置失准权限配置不当引发安全漏洞内存参数未优化造成性能瓶颈 本…...
vue3怎么和大模型交互?
引言 平时我们都是用的在线的AI工具,直接输入问题,然后AI回答我们,那么怎么把AI接入项目中呢? 这个问题问得好。 方案一:引入第三方已封装好的UI库方案二:自己写 对于方案一,市面上已有一些…...
【网络编程】HTTP网络编程
13.1 HTTP 简介 HTTP(Hyper Text Transfer Protocol,超文本传输协议)是用于从万维网(WWW:World Wide Web) 服务器(简称Web 服务器)传输超文本到本地浏览器的传送协议,基于TCP/IP 通信协 议来传递数据 (HTML 文件、图片文件、查询结果等)。 13.2 HTTP 的工作原理 …...
【Qt】QWidget属性介绍
🏠个人主页:Yui_ 🍑操作环境:Qt Creator 🚀所属专栏:Qt 文章目录 前言1. enabled属性2.geometry属性2.1 改变控件位置2.2 女神表白程序2.3 知识补充——window frame 3. windowsTitle属性4. windowIcon属性…...
『Rust』Rust运行环境搭建
文章目录 rust编译工具rustupVisual Studio VS Code测试编译手动编译VSCode编译配置 参考完 rust编译工具rustup https://www.rust-lang.org/zh-CN/tools/install 换源 RUSTUP_DIST_SERVER https://rsproxy.cn RUSTUP_UPDATE_ROOT https://rsproxy.cn修改rustup和cargo的安…...
vue/react/vite前端项目打包的时候加上时间最简单版本,防止后端扯皮
如果你是vite项目,直接写一个vite的插件,通过这个插件可以动态注入环境变量,然后当打包的时候,自动注入这个时间到环境变量中,然后在项目中App.vue中或者Main.tsx中打印出来,这就知道是什么时候编译的项目了…...
基于大模型的上睑下垂手术全流程预测与方案优化研究报告
目录 一、引言 1.1 研究背景与目的 1.2 研究意义 1.3 研究方法与创新点 二、上睑下垂相关理论基础 2.1 上睑下垂的定义与分类 2.2 发病机制与影响 2.3 传统治疗方法概述 三、大模型技术原理与应用 3.1 大模型概述 3.2 在医疗领域的应用现状 3.3 用于上睑下垂预测的…...
Cadence学习笔记3
设置 PCB 层叠 初始我们有一个两层板,如果需要添加层叠怎么办? 点击进入层叠设置 首先右击 TOP 层下面的空白,然后鼠标右键进行 add layer 然后选择 Plane(一般层就是这个) 就好 然后 add就行 设置光标显示形式 在 setup ->…...
Linux系统下如何部署svmspro平台
上传svmspro服务 rz回车后选择svmspro.zip上传如果提示rz命令未找到,请先运行 yum install -y lrzsz 安装将svmspro.zip解压出来,并拷贝到/usr/目录下,命令如下: unzip svmspro.zip//解压程序包cp svmspro /usr/ -r//将svmspro文件…...
vue3:八、登录界面实现-忘记密码
一、页面效果 二、实现 1、视图层 <el-form-item class"flex flex-between"><el-checkbox label"记住密码" v-model"remember" /> </el-form-item> 参考 Checkbox 多选框 | Element Plus 2、逻辑层 首先设置记住密码的变…...
el-table树形表格合并相同的值
el-table树形表格合并相同的值 el-table树形表格合并相同的值让Ai进行优化后的代码 el-table树形表格合并相同的值 <style lang"scss" scoped> .tableBox {/deep/ &.el-table th:first-child,/deep/ &.el-table td:first-child {padding-left: 0;} } …...
Apache Tomcat漏洞,对其进行升级
我们付出一些成本,时间的或者其他,最终总能收获一些什么。 升级背景: 近日,新华三盾山实验室监测到 Apache 官方修复了一个远程代码执行漏洞 (CVE-2025-24813) ,其CVSS3 漏洞评分为 7.5 。 影响范围 9.0.0.M1 ≤…...
工程实践:如何使用SU17无人机来实现室内巡检任务
阿木实验室最近发布了科研开发者版本的无人机SU17,该无人机上集成了四目视觉,三维激光雷达,云台吊舱,高算力的机载计算机,是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…...
时序优化学习笔记
0.代码对应的底层调用 if-else的判定条件需要LUT实现,累加器的进位需要靠CARRY实现。 1.逻辑级数的概念 简单来讲就是组合逻辑串联的个数 逻辑级数查询命令 report_design_analysis -logic_level_distribution -logic_level_dist_paths 5000 -name design_analy…...
OSPF-3 1类LSA Router LSA
前面两期我们介绍了OSPF的邻居与邻接建立的关系及失败因素和原因 这章我们来说说OSPF是如何通过不同的LSA去描述拓扑的信息以及路由信息 一、概述 OSPF通过不同的LSA来构成LSDB链路状态数据库,再通过SPF算法来计算出最优的最短路径 二、LSA的分类 类型名称描述传播范围1类…...
纳米压印技术制备AR眼镜的参考步骤
纳米压印技术(Nanoimprint Lithography, NIL)在 AR(增强现实)眼镜中的应用主要集中在光学元件的制造上,例如衍射光栅、波导和微透镜阵列等。以下是使用纳米压印技术制备 AR 眼镜光学元件的详细步骤: 1. 设…...
FX-std::list
std::list 是 C 标准库中的一个双向链表容器,定义在 <list> 头文件中。它支持在任意位置高效地插入和删除元素,但不支持随机访问。以下是 std::list 的基本用法和一些常见操作: 1. 包含头文件 #include <list> 2. 定义和初始化…...
【清华大学第七版】DeepSeek赋能家庭教育的实操案例(批改作文+辅助语文/数学/科学学习+制定学习计划)
我用夸克网盘分享了「DeepSeek完整资料合集」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/621259e4af15 近日,清华大学发布了《…...
HCIA-ACL实验
前提条件:实现底层互通 转发层面 1、基本ACL ①要求PC3不能访问网段192.168.2.0的网段,PC4和客户端能正常访问服务器 ②AR2配置 acl 2000 rule deny source 192.168.1.1 0 匹配流量 int g 0/0/0 traffic-filter inbound acl 2000 接口调用…...
【Gee】项目总结:模仿 GIN 实现简单的 Golang Web 框架
文章目录 Gee 项目回顾Gee 项目总结Golang 已经具备基础的 web 功能,为什么还需要 web 框架?作为 web 框架,Gee 框架完成了哪些功能?如何用 Gee 来构建 web 项目? Gee 项目回顾 上个月月末我按照 Geektutu 的教程&…...
DeepLabv3+改进10:在主干网络中添加LSKBlock|动态调整其大型空间感受野,助力小目标识别
🔥【DeepLabv3+改进专栏!探索语义分割新高度】 🌟 你是否在为图像分割的精度与效率发愁? 📢 本专栏重磅推出: ✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化 ✅ 即插即用模块:ASPP+升级、解码器 PS:订阅专栏提供完整代码 目录 论文简介 步骤一 步骤二…...
词向量:优维大模型语义理解的深度引擎
★ 放闸溯源 优维大模型「骨架级」技术干货 第二篇 ⇓ 词向量是Transformer突破传统NLP技术瓶颈的核心,它通过稠密向量空间映射,将离散符号转化为连续语义表示。优维大模型基于词向量技术,构建了运维领域的“语义地图”,实现从…...
编译原理:语法分析程序【附源码和超详细注释】
目录 一 、实验目的 二 、实验内容及步骤 三、程序分析 1. 需求分析 2. 功能分析 1. LL(1)文法功能分析 2. 算符优先文法功能分析 3. 信创分析-主要针对能力提升中国产操作系统上开发内容。 四、源代码 1. LL(1)文法代码 2. 算符优先文法 五、测试结果 1. LL(1)文…...
Go vs Rust vs C++ vs Python vs Java:谁主后端沉浮
一、核心性能对比(基于TechEmpower基准测试) 语言单核QPS延迟(ms)内存消耗适用场景Rust650,0000.1245MB高频交易/区块链C++720,0000.0932MB游戏服务器/实时渲染Go230,0000.45110MB微服务/API网关Java180,0001.2450MB企业ERP/银行系统Python12,0008.5220MBAI接口/快速原型技术…...
