STM32(十七):I2C通信外设

ops/2024/11/12 4:13:29/

I2C外设        

        STM32内部集成了硬件I2C收发电路(USART是串口通信的硬件收发电路),可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担。

        支持多主机模型(可变多主机)

        支持7位/10位地址模式

        支持不同的通讯速度,标准速度(高达100 kHz),快速(高达400 kHz)

        支持DMA

        兼容SMBus协议(主要用于电源管理系统中)

        STM32F103C8T6 硬件I2C资源:I2C1、I2C2

        软件I2C比较灵活,硬件I2C效率高。

I2C框图

        当数据从数据寄存器移动到数据移位寄存器时,置状态寄存器TXE位为空。接收时候,数据移位级寄存器移动到数据寄存器,置状态标志位RXNE 1,表示接收寄存器非空。 

I2C基本结构

         使用硬件I2C的时候,两个对应的GPIO口都要配置成复用开漏输出的模式。复用:GPIO口的窗台是交由片上外设来控制的(时钟控制器,数据控制器)。开漏输出:I2C协议要求的端口配置。

主机发送

        初始化之后,总线默认空闲,STM32默认是从模式。为了产生一个起始条件,STM32需要写入控制寄存器,CR1中START位写1,就可以产生起始条件,起始条件发出后,可以由硬件清除。控制完硬件之后,就要检查标志位,看有没有达到我们想要的状态。控制寄存器STOP位写1,可以产生停止条件。

主机接收

 

 软件I2C和硬件I2C波形对比

 上面是软件I2C ,下面是硬件I2C。

备注:不知道你们对ADDR位清除有没有疑虑。

 在发送时候都没有对SR2寄存器进行访问,怎么清除的标志位呢?

带着这个疑问,看一下代码!

可以看到,只要使用这个函数,都会对SR2进行访问,也就满足了清除条件,完美! 


http://www.ppmy.cn/ops/114592.html

相关文章

5分钟内理解 .prototype 链 | 2024

在JavaScript的世界里,原型(prototype)系统是一个常被讨论但不易掌握的概念。作为JavaScript继承模型的基石,理解原型对于构建大型应用或进行对象操作至关重要。让我们一起探索这个迷人的话题,揭开原型系统的神秘面纱。 什么是原型? 在JavaScript中,每个对象都有一个内部属性[…

【.NET 8 实战--孢子记账--从单体到微服务】--特别说明

这篇文章是针对《孢子记账》实战专栏的说明文章,用以解答同学们的疑惑,后续针对专栏的疑惑我都会写在这里,各位铜同学有什么问题也可以在这篇文章下面留言。专栏的简介已经在文章《开篇》做过介绍了,不了解的请移步《开篇》。下面…

【有啥问啥】深度剖析:大模型AI时代下的推理路径创新应用方法论

深度剖析:大模型AI时代下的推理路径创新应用方法论 随着大规模预训练模型(Large Pretrained Models, LPMs)和生成式人工智能的迅速发展,AI 在多领域的推理能力大幅提升,尤其是在自然语言处理、计算机视觉和自动决策领…

《ElementUI/Plus 基础知识》el-table + sortablejs 实现 row 拖动改变顺序(Vue2/3适用)

前言 使用如下技术: ElementPlus Table 组件;插件 sortablejs ( npmjs/Github 地址); 实现 html 代码第 1 行,属性 row-key 一定要设置,否则会报错。即行数据的 Key,用来优化 t…

项目第十弹:连接管理模块与服务器模块

项目第十弹:连接管理模块与服务器模块 一、连接管理模块的设计1.连接模块的设计2. 连接管理模块的设计1.连接ID? TcpConnectionPtr!! 二、连接管理模块的实现1.连接模块的实现2.连接管理模块的实现 三、服务器模块的设计1.前言2.设计 四、服…

go webapi上传文件 部属到linux

go厉害的地方,linux服务器上无需安装任务依赖就可以运行,大赞! 一、编译 #在Goland中cmd中执行 go env -w GOARCHamd64 go env -w GOOSlinux go build main.go # 切换回来 否则无法运行 go env -w GOOSwindows go run main.go 拷贝到linux服…

ALSA ubuntu 编译

1、下载tar包:alsa-lib、alsa-utils GitHub - alsa-project/alsa-lib: The Advanced Linux Sound Architecture (ALSA) - library(核心库) GitHub - alsa-project/alsa-utils: The Advanced Linux Sound Architecture (ALSA) - utilities(工具库) 2、…

基于Java的SSM(Spring、Spring MVC、MyBatis)框架构建的远程诊断系统

基于Java的SSM(Spring、Spring MVC、MyBatis)框架构建的远程诊断系统,适用于医疗、工业设备监测等多个领域。这样的系统通常需要具备实时数据采集、数据分析、故障诊断等功能。下面是一个简化的系统设计方案,以及一些关键组件和技…