I2C软件模拟时序的基本要素

目录

前言

一、关于I2C

二、正文

1.引脚的配置

2.I2C的起始和终止时序

3.发送一个字节

4.接收一个字节

5.应答信号

6.指定地址写和指定地址读

总结



前言

环境:

芯片:STM32F103C8T6

Keil:V5.24.2.0

本文主要参考江科大教程,如有不明白地方,可在B站搜索江科大,有视频讲解教程。

一、关于I2C

网上挺多的资料,大家自己搜索下(惯例水一下)

这里需要说一下,SCL:时钟线,也有叫SCK的

SDA:数据线。顾名思义,数据都是在这条线上传输的

二、正文

1.引脚的配置

注意:SCL和SDA一定要配置成开漏输出模式。因为从机会拉低电平进行应答或数据传输,如果此时有强上拉,将会形成短路,造成元件损坏。所有I2C均是如此。切记。

所以第三条会有上拉电阻,形成弱上拉。此时放开IO输出,IO电平会随着弱上拉变成高电平

所以可以输出高低电平,但是没有驱动能力。

2.I2C的起始和终止时序

如图:无需多言。

3.发送一个字节

时序:

1。在SCL低电平期间,将数据放在SDA上,1为高电平,0为低电平。

2.当SCL为高电平时读取此时的SDA电平,判断数据是0或1.

3.然后SCL拉低电平。

4.SDA放入数据。重复步骤1-3.实现多字节写入

备注:

1.实际在SCL上升沿时,数据就已经读取完毕。

2.在SCL高电平时,SDA不可以改变状态。

4.接收一个字节

和发送一个字节类似,不过它是由从机发送,主机接收

时序:

1.主机拉低SCL

2.从机在SCL低电平期间,将数据放入SDA,1为高电平,0为低电平

3.主机在SCL高电平期间读取SDA的数据.

4.主机拉低SCL

5.从机放入数据在SDA,循环1-5可以读取多个字节的数据

注意:

和写不一样的地方:SCL依旧由注意控制,但是主机拉低SDA后需要要释放掉SDA,进入输入模式.此时从机可以操控SDA电平.

5.应答信号

如图:无需多言.

注意:当用示波器抓取从机的应答信号时,理论上,当SDA被主机释放时会变成高电平,然后由从机拉低.但是可能无法抓取到SDA的高电平.原因是:从机在感应到SDA电平变化的时候接手,又把电平拉低了,造成SDA还未达到高电平就被从机拉低.时间太短示波器无法抓取.

6.指定地址写和指定地址读

 1.指定设备

2.指定设备中的寄存器地址

3.写入数据(读取的话一样的顺序)

注意:I2C设备读取的地址为上次操作的地址,操作完后会自动+ 1;如果数据是连续的,就可以连续读取.如果是不连续的就需要每次指定地址才可以.


总结

I2C的时序基本一致,会一个就可以会全部.希望大家技术越来越牛

关关难过关关过,前路漫漫亦灿灿.

共勉.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1522378.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Centos Stream9系统安装及网络配置详解

1.镜像下载 如未拥有系统镜像文件的伙伴可通过前往下面的连接进行下载,下载完成后需将其刻录至U盘中。 PS:该U盘应为空盘,刻录文件会导该盘格式化,下载文件选择dvd1.iso完整包,适用于本地安装。 下载地址&#xff1…

免费申请aws一年免费服务器使用教程

由于近期要测试一个公网项目,对比之下,选择了aws服务器,免费使用一年。 准备:一个visa信用卡即可,需要一个外网邮箱(我这边使用的hotmail) 注册的步骤不再赘述,切记几个点&#xff0…

【精选】基于Django的智能水果销售系统设计与实现

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

重要通知! | Paraverse平行云GitHub搬家啦!

随着“平行云”更名为“Paraverse平行云”,我们的GitHub地址也做出了相应调整。欢迎开发者访问我们的新地址,继续共享我们的开源仓库与实时云渲染软件! 更改的核心内容如下: pingxingyun >> ParaverseTechnology * 文档…

Linux_kernel简介01

--------------------------------------------------------- 力扣专题 --------------------------------------------------------- 一、嵌入式开发 1、ARM的历史 ARM原本含义(Acom RISC Machine)后来Acron公司独立出了ARM部门,成立了ARM公司(Advan…

渲染100高性能云渲染,性价比超高

在这个3D渲染行业迅速发展的时代,对于渲染速度和稳定性的渴望日益强烈。需要更快的渲染时间来缩短项目周期,同时希望渲染过程更加稳定,避免问题导致的损失。 如今市场上虽然不乏各种云渲染服务,但要找到既经济又能满足高要求的选…

taro vue 微信小程序 手写签名 功能实现

目录 需求: 效果: template: data: methods: 手写绘制: 图片保存: css: 需求: 在指定区域可以手写签名,点击重新签名,清除手写区域 点击提交签名,将手…

OpenAI GPT3 Search API not working locally

题意:"OpenAI GPT-3 搜索 API 在本地无法工作" 问题背景: I am using the python client for GPT 3 search model on my own Jsonlines files. When I run the code on Google Colab Notebook for test purposes, it works fine and returns …

若依部署后出现Error: Cannot find module ‘@/views/xxx‘问题,本地没有问题(解决办法)

若依部署后出现Error: Cannot find module ‘/views/xxx‘问题,本地没有问题 文章目录 若依部署后出现Error: Cannot find module ‘/views/xxx‘问题,本地没有问题一、问题描述1️⃣:描述2️⃣:原因 二、解决办法1.permission.js…

Win32远线程注入

远线程注入 远线程(RemoteThread)注入是指一个进程在另一个进程中创建线程的技术,这是一种很经典的DLL注入技术。 虽然比较古老,但是很实用。通过远线程注入,再配合api函数的hook技术,可以实现很多有意思的功能。 实现远线程注入…

Java项目: 基于SpringBoot+mysql学生读书笔记共享平台(含源码+数据库+毕业论文+springboot开发文档)

一、项目简介 本项目是一套基于SpringBootmysql学生读书笔记共享平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单…

JsonCpp库的使用

目录 一、Json数据格式 二、JsonCpp介绍 2.1 Json::Value 2.2 序列化接口 2.3 反序列化接口 三、JsonCpp的使用 3.1 头文件包含 3.2 序列化 3.3 反序列化 四、补充 Json 是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表示数据。 一、J…

Cvemap 到Nuclei模板映射

随着 ProjectDiscovery 的崛起,Nuclei、Katana、Subfinder、Naabu 以及最新添加的 cvemap 等工具纷纷出现,以增强勇敢者的武器库。 CVEmap 和 Nuclei 缺少功能 大多数渗透测试人员对缺少将cvemap结果直接“映射”到现有核心模板的功能感到失望。 这个绝…

macOS搭建Python3.11+Django4.2.15的平台框架使用Poetry管理

最近想使用Python开发,使用Django框架搭建平台,之前没有使用过Python,所以记录下整个过程: 1、Python版本的选择,直接去官网【Download Python | Python.org】看最新稳定版是哪个版本,选择安装&#xff0c…

Redis配置

redis配置管理 可以直接打开配置文件进行查看和修改,也可以通过config命令来进行查看和修改。 配置文件位置 Linux中默认在/etc/redis/redis.conf。Windows 中默认在安装目录下,名为 redis.windows.conf。 查看redis配置 使用redis-cli连接redis后&…

Anaconda安装并配置Python环境 | Python系列教程

Anaconda 是一个流行的 Python 数据科学和机器学习平台,它简化了包管理和部署的复杂性。Anaconda 旨在通过提供一个预配置的环境来加速数据分析、机器学习、科学计算和软件开发等领域的开发流程。总的来说,Anaconda 是一个强大的平台,它通过简…

ubunto中常见问题及WSL

ubunto中常见问题 ubuntu中vscode界面放大缩小的快捷方式ubuntu中vscode界面放大缩小的快捷方式_ubuntu中让vscode全屏-CSDN博客https://blog.csdn.net/weixin_47295886/article/details/123023748 解决出现无法使用sudo命令情况 解决出现无法使用sudo命令情况 - 知乎 (zhih…

DVP接口详解

背景知识 什么是DVP? DVP全称Digital Video Port(数字视频端口)是一种用于图像传感器和处理器之间传输视频数据的接口标准,DVP 接口采用并行传输方式,设计上属于低速总线,DVP没有特定的传输协议&#xff…

office365如何退回之前的版本

一夜之间,我的word使用起来感觉好麻烦。查询了一下,发现是word更新了。 感觉更新后一些功能很不好用,所以我决定返回之前使用的版本。现在记录一下这个过程,也可以供有需要的朋友参考。 打开cmd窗口,在第一行输入以下…

Vue3实时更新时间(年-月-日 时:分:秒)

代码案例 <script lang"ts" setup> import { ref,onMounted } from vue; const timer ref() const date ref("")//年月日 const moreTime ref("")//时分秒 onMounted(()>{//创建定时器1秒执行一次timer.value setInterval(() >…