STM32——I2C通信外设

软件只需要CR控制寄存器,DR数据寄存器,为实时监控状态,软件需要读取SR状态寄存器,好比:开车时CR是控制汽车方向,踩油门等,SR是仪表盘。

由于I2C是半双工,因此发送和接收数据都是在移位寄存器和DATA 寄存器中进行,发送数据时,在数据向移位寄存器转移时,新的数据就会进入到DATA寄存器中。

接收数据时先到移位寄存器,之后转移到DATA寄存器

简化如下:由于I2C是高位先行,因此发送数据是左移。

I2C的GPIO为开漏输出模式

此处时钟可以输入也可以输出

之后是主机发送部分:

首先是10位的帧头,11110+2位地址位+1位读写位,后边是剩余8位地址位

发送数据:数据写入DR中,之后当移位寄存器空时,将数据转入移位寄存器中进行发送,当DR中的一个数据被全部转移到移位寄存器时,就会有新的数据进入到DR中,等待进行下一次转移到移位寄存器中,当接收应答位后,数据就被转移到移位寄存器中

主机接收部分:以当前地址读的形式展示主机接收

起始条件------从机地址+读------应答------接收数据------应答------接收数据------非应答------终止

代码部分,在硬件中不需要用软件配制I2C协议的内容,全由硬件实现

首先是初始化部分,相对比与软件来说,硬件这部分初始化需要增加部分:1、开启I2C和GPIO口的时钟;2、对GPIO口进行设置并为复用开漏输出模式(复用:GPIO控制权交给外设);3、对I2C进行设置;4、开启I2C使能

对MPU6050的配置保留。

时钟速度在100KHz下是标准模式,高低电平时间一致,占空比为1:1;超过100KHz后,进入快速模式,低/高近似=2:1;400KHz最大时钟速度

和软件一致。

之后是写寄存器的代码需要进行替换:

根据上面的主机发送图可得:

先设置起始条件------EV5事件------发送从机地址并应答------EV6(发送数据的代码)------发送寄存器地址并应答------EV8------发送数据(一个字节)------EV8_2------停止条件

为代码更加简便,增加了一个等待函数,当超时时就不再等待事件的发生,防止卡死

之后是主机接收的过程:

起始条件------EV5------发送从机地址并应答------EV6(发送数据的代码)------发送寄存器地址并应答------EV8_2/8------重新发送起始条件------EV5------发送从机地址并应答------EV6(接收数据的代码)---ACK=0失能(只读取一个字节时)------停止条件------EV7------接收数据------ACK=1使能(默认是1使能)------返回数据

实验结果与上一篇一致

相关推荐
墨染倾城殇7 分钟前
蓝牙车钥匙方案:低功耗蓝牙模块引领科技与生活完美融合
科技·嵌入式硬件·生活·蓝牙模块·低功耗蓝牙·车钥匙解决方案
richxu202510018 分钟前
嵌入式学习之路>单片机核心原理篇>(14) ARM 架构
arm开发·单片机·学习
清风66666640 分钟前
基于单片机的蔬菜大棚温湿度远程测报系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
电子科技圈1 小时前
SiFive车规级RISC-V IP获IAR最新版嵌入式开发工具全面支持,加速汽车电子创新
嵌入式硬件·tcp/ip·设计模式·汽车·代码规范·risc-v·代码复审
民乐团扒谱机1 小时前
十字路口交通信号灯控制器设计(Multisim 电路 + Vivado 仿真)
单片机·fpga开发·verilog·状态机·仿真·时序逻辑·multism
bai5459362 小时前
STM32 CubeIDE 按键控制LED
stm32·单片机·嵌入式硬件
小π军2 小时前
51单片机第2讲:数码管
单片机·嵌入式硬件·51单片机
光子物联单片机2 小时前
STM32单片机开发入门(十一)STM32CubeIDE下载安装及开发调试说明
c语言·stm32·单片机·嵌入式硬件·mcu
cat_milk2 小时前
【潘多拉 STM32L475 IOT开发指南】【基础】1.LED
stm32·单片机·物联网
TEC_INO2 小时前
Stm32_2:蜂鸣器、按键、继电器
stm32·单片机·嵌入式硬件