STM32的I2C通讯过程】的更多相关文章

使用I2C外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1 及SR2)”的不同数据位写入参数,通过读取这些寄存器标志来了解通讯状态. 1.主发送器 可使用STM32标准库函数来直接检测这些事件的复合标志,降低编程难度. • 控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对 SR1寄存器的“SB”位置1,表示起始信号已经发送: • 发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及 “EV8”,这时SR1寄存器的“ADDR”位及“TXE”位被置1,ADDR…
STM32 的I2C 特性及架构 如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA 电平),就可以实现I2C 通讯.同样,假如我们按照USART 的要求去控制引脚,也能实现USART通讯.所以只要遵守协议,就是标准的通讯,不管您如何实现它,不管是ST 生产的控制器还是ATMEL 生产的存储器, 都能按通讯标准交互. 由于直接控制GPIO 引脚电平产生通讯时序时,需要由CPU 控制…
I2C接口是一种使用非常普遍的MCU与外部设备的接口方式,在STM32中也集成了I2C接口,我们也常常使用它来与外围的传感器等设备通讯. 最近在我们使用STM32F1VET6读取压力和温湿度传感器数据时,就是使用I2C接口来实现通讯的.但在使用I2C和STM32F1的标准库读取数据时出现了死机的现象.其现象是这样的,程序可以顺利的运行,但I2C没有数据返回.用示波器查看波形时,发现SCL的电平时钟为高,而SDA的电平时钟为低.如果拔掉对应的设备,SCL的波形则恢复正常.接上设备恢复正常,但运行一…
MS5803压力传感器支持SPI和I2C总线通讯,拥有24位AD转换.能够同时获得压力值和温度值,其中压力测量范围为10-1100mbar,温度的测量范围是-40-85摄氏度.各引脚功能及参数如下: 传感器内部结构图如下: 通讯协议的选择通过PS引脚来设置: PS引脚电位 通讯模式 使用的引脚 高电平 I2C SDA, SCL, CSB 低电平 SPI SDI, SDO, SCLK, CSB 在SPI模式下,SCLK作为外部输入时钟,SDI作为串行数据输入,支持Mode0和Mode3的时钟极性和…
MS5837压力传感器是一种可用于电路板上,适用于检测10-1200mbar压力范围的传感器,灵敏度非常高,理论上能够检测到0.01mbar的压力变化,实际使用过程中测试并无明显的变化. MS5837采用I2C总线通讯,与STM32的MCU可以实现I2C通讯.硬件连接方式如下: MS5837只有5个基本命令:复位.读取出厂校准值.数据1转换(压力值数据).数据2转换(温度值数据)和读取ADC的转换结果.具体分配如下: 因为MS5837的地址是固定的,所以一个I2C总线只能挂1个MS5837模块.…
关于STM32的I2C硬件DMA实现 网上看到很多说STM32的I2C很难用,但我觉得还是理解上的问题,STM32的I2C确实很复杂,但只要基础牢靠,并没有想象中的那么困难. 那么就先从基础说起,只说关键点,不涉及代码. 首先说I2C这个协议:协议包括START.ACK.NACK.STOP.尽管协议中规定START必须,其他几个非必须,但实际上其他三个仍旧非常重要. 主发从收:主 START -> 主发地址 -> 从 ACK -> (主发数据 -> 从 ACK (循环)) ->…
I2C协议概述,有相当详细的名词解释: 通信数量受限于地址空间和400Pf总线电容. 所有的数据传输过程中,SDA线的电平变化必须在SCL为低电平时进行,SDA线的电平在SCL线为高电平时要保持稳定. I2C通讯协议软件模拟实现方法: 1.起使信号 void I2C_Start(){ SDA_H; 3 delay(n); //电平切换时间 SCL_H; delay(>4us); //初始状态必须保持4us以上 SDA_L; //在SCL为高时,拉低SDA线发送起始信号. delay(>.7us…
http://home.eeworld.com.cn/my/space-uid-716241-blogid-655190.html 一.I2C协议简介 I2C是两线式串行总线,用于连接微控制器及其外围设备.两根信号线分别是: 时钟信号线SCL和数据信号线SDA.   二.I2C总线传输时序 2.1 I2C传输协议的三种信号 I2C在数据传输过程中有三种信号类型,分别是:起始信号.结束信号和应答信号. ①起始信号:在时钟信号SCL为高电平时,数据线SDA由高电平跳变为低电平,开始传输数据: ②结束…
软件模拟协议:使用CPU直接控制通讯引脚(GPIO)的电平,产生出符合通讯协议标准的逻辑. 硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发.这种由硬件外设处理I2C协议的方式减轻了CPU的工作,且使软件设计更加简单. STM32的I2C外设可用作通讯的主机及从机,支持100Kbit/s和400Kbit/s的速率,支持7位.10位设备地址,支…
引子 STM32的硬件I2C很多人都对它望而却步.因为很多电工都说,STM32 硬件 I2C有BUG.不稳定.死机等等……最后都使用GPIO模拟I2C. 的确,模拟I2C好用.但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥.一般来说I2C是一种慢速总线,就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us——还没有计算地址.起始信号和结束信号的发送.如果使用GPIO模拟的I2C,这23us的CPU时间都在空转中浪费了,而这23us已经可以做不少的事情了,…