你还不知道STM32通信容易出错的情况

本文介绍了STM32中的I2C通信协议,包括其主从模式特性、通信速度、寻址模式和收发模式。同时,指出了I2C的常见问题,如IO模式配置错误、总线电压不匹配和软件检测死机,并提供了相应的解决办法。STM32的I2C功能丰富,但在实际应用中需要注意硬件配置和软件处理。
摘要由CSDN通过智能技术生成

59f780f037a463cf39d2667d9d547094.png

\\\插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程还有800套毕业设计电赛资料,想要的同学找我( 禾厶-亻言-手戈 )。最近比较闲,带做毕设,带学生参加省级以上比赛///

524b2f10bc0bdba229b1b9a7c4eece36.png

STM32学习笔记—通信容易出错的情况

I2C:全称为Inter-Integrated Circuit(内部集成电路),是一种串行通讯总线,常用于嵌入式电子产品中。

这是第4篇分享,《STM32进修笔记》之I2C通信容易出错的情况。

I2C是飞利浦公司在1980年为了让各种低速设备(飞利浦芯片)连接起来而研发的一种通信总线。目前,I2C依然是最常见的通信总线之一,此时绝大局部MCU都内部集成了I2C控制器,STM32也不例外,至少有一个I2C控制器,有的型号甚至多达6个。

STM32 I2C根底内容

I2C总线协议有多个版本,有的STM32遵循的是第2版本,有的是第3版本。所以,不同型号的 STM32 中I2C 可能存在一些差异,但根本功能相似。

一. 主从模式特性

主模式特性:

·时钟生成

·起始位和停下位生成

从模式特性:

·可编程 I2C地址检测

·双寻址模式,可对 2 个从地址应答

·停下位检测

二. 通信速度鄙訇准速度:高达 100 kHz快捷速度:高达 400 kHz超快捷度:高达 1 MHz(第3版)

三.寻址模式

·7 位寻址模式

·10 位双寻址模式

·广告呼叫地址

四.收发模式

·从发送器

·从接管器

·主发送器

·主接管器

这些都是STM32 I2C的根底功能,更多内容请查阅芯片对应的参照手册。

I2C 总线协议

I2C总线就两根线:SCL时钟信号,SDA数据信号。其中SCL由主机产生,SDA由主机或者从机产生。

I2C是同步串行通信,同一时长SDA只能由一个设备发送信号,也就是说它属于半双工通信。

I2C 总线协议可参照总线(SDA和SCL)的时序进行了解:

6cd29c581e33c100d6c4b9df10b7151a.png

通常包括:起始位、数据/地址、ACK、完毕位。

一. 初始和停下在时钟线保持高的情况下,SDA数据线由高 -> 低:为总线初始条件;在时钟线保持高的情况下,SDA数据线由低 -> 高:为总线完毕条件;

二. 地址I2C地址分7位和10位。

7位地址:

05124738fe13088229adaa5922e2f3fe.png

10位地址:

8ca4a38ba10359394e409fe0eca27c76.png

三. 应答(ACK)应答(ACK)和非应答(NACK)发生在每个字节之后,是由接管方向发送方发出确认信号,表明数据已成功接管,并且能够继续发送下一字节数据。

4c8c2c1a87fbc6380bfc6b9a40e85bdb.png

STM32 I2C常见问题

I2C 总线通信,通常不会像CAN、USB这类总线添加一些复杂的(软件)通信协议。I2C 虽然硬件和协议简略,但在现实中应用中还是经常出现各种问题。下面就来分析一下常见的问题。

问题一:IO模式不对

有些工程师对用于I2C 总线的GPIO不了解,写驱动代码时把总线(SDA、SCL)配置成推挽输出模式,导致应用上的异常。

I2C 总线是一种特殊的总线,由于多器件需共用总线,加上数据线需支持双向通信。SDA要求开漏输出模式。由于开漏没法直接输出“高”时,需外加上拉电阻配合。

攻克办法:STM32的IO有8种应用模式,假设你通过软件模拟I2C,并将SDA配置为开漏输出模式,配合上拉电阻。这往往适用于主模式器件。假设运用硬件I2C,则须要配置成开漏复用功能。建议运用STM32CubeMX工具配置底层初始化代码。

问题二:总线电压不匹配

I2C 总线电压通常为三.3V或5V。有的I2C C总线上挂的设备比较多,有可能存在特殊电压,假设二.5V,或者三.3V不兼容5V,就容易引起信号辨识错误导致总线通信失败的情况。

攻克办法:假设存在电压不匹配的情况,须要从硬件方面来攻克,假设:通过专业转换模块。

问题三:软件检测死机

I2C 总线一般通过ACK信号来判断总线的情况,STM32达到I2C 收发、检测等操作是由内部控制器自动完成。

然而由于一些外部因素,假设干扰信号、电压不匹配等,容易引起总线

fab0b1a7e3ef6f3cfea03adf26f0c969.pngb28114712c75d3addc077b07912d047e.png

绿色图标【‟で】airruimcu

上的信号不正常,从而导致检测失败,通信失败。

解决办法:解决这种因异常引起的死机,除了从硬件方面做调整外,也可以从软件入手,常见的做法是添加超时处理机制,不要让程序一直死等检测应答信号。

比方当发送超时情形时,可以尝试复位STM32 I2C外设或相关设备。

bfe6cb54d793f0e2f4c94e1ebbc0f09c.png

想要学习单片机的朋友 ,做毕业设计的同学,关注我们,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机一哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值