当前位置: 首页 > news >正文

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使能)——返回数据

实验结果与上一篇一致

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度理解指针(2)
  • 探索Unity3D URP后处理在UI控件Image上的应用
  • 使用cbsd指令快速创建bhyve Ubuntu虚拟机实践
  • Apache CloudStack Official Document 翻译节选(八)
  • IO进程线程8月22日
  • EasyExcel动态实现表头以及数据封装
  • 树莓派开发笔记10-树莓派的HTTP通信实验
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——6.vector
  • 【YOLO5 项目实战】(6)YOLO5+StrongSORT 目标追踪
  • 再学C++(一):C++中类与结构体的区别
  • 【C++ Primer Plus习题】2.6
  • 模型优化之剪枝
  • libevent之android与鸿蒙编译过程
  • H3C M-LAG与双活网关接口结合应用场景实验
  • 数据结构-链表-第二天
  • 【技术性】Search知识
  • Angularjs之国际化
  • es6--symbol
  • npx命令介绍
  • Python3爬取英雄联盟英雄皮肤大图
  • SpiderData 2019年2月16日 DApp数据排行榜
  • springMvc学习笔记(2)
  • Web标准制定过程
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 基于web的全景—— Pannellum小试
  • 前端代码风格自动化系列(二)之Commitlint
  • 入手阿里云新服务器的部署NODE
  • zabbix3.2监控linux磁盘IO
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​configparser --- 配置文件解析器​
  • #define
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)ATF MMU转换表
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (day 12)JavaScript学习笔记(数组3)
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (苍穹外卖)day03菜品管理
  • (第一天)包装对象、作用域、创建对象
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)c52学习之旅-简单了解单片机
  • (六)vue-router+UI组件库
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (五)网络优化与超参数选择--九五小庞
  • (转) RFS+AutoItLibrary测试web对话框
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net IOC框架入门之一 Unity
  • .NET的数据绑定
  • .net经典笔试题
  • ::before和::after 常见的用法
  • @AliasFor注解