基于STM32F401RET6智能锁项目(AT24C0X存储芯片)

2024-05-13 19:20

本文主要是介绍基于STM32F401RET6智能锁项目(AT24C0X存储芯片),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、IIC基本介绍

1、IIC通信接口

• I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线
• 两根通信线:SCL(串行时钟线)、SDA(串行数据线)
• 同步,半双工
• 带数据应答
• 支持总线挂载多设备(一主多从、多主多从)
一主多从:单片机作为主机,主导I2C总线的运行,挂载在I2C总线的所有外部模块都是从机,从机只有被主机点名之后才能控制I2C总线,不能在未经允许的情况下去碰I2C总线,防止冲突。
多主多从:在总线上的任何一个模块都可以是主机

2、IIC通信接口的特点

①.双线制。一根是SCL,作为时钟同步线;一根是SDA,作为数据传输线。

②.半双工。因为真正做数据传输的只有SDA,所以使用IIC通信的双方能双向通信,但不能同时

③.同步通信。有同步信号线SCL,通信协议时序严格,SDA在通信双方初步同步后在SCL的时序下按位传输数据。

④.通信为主从机模式。支持一主多从模式,通信过程中SCL一直由主机控制,而SDA则不固定

⑤.从属设备地址。因为支持主从机模式,所以IIC总线中主机在通信过程中为了确保找到具体的从机,需要先知道该从机的设备地址(Device Address)而主机则不需要设备地址。

二、IIC从设备的地址

1、设备地址的组成

①从机地址是7位,读写位是1位。

②读写位

因为lIC是半双工通信接口,所以在主机开始与从机通信前,主机需要告诉从机此次通信是谁做为发送方,谁做为接收方。故有了读写位。

其中最低位为0表示写模式----主机作为发送方;1表示读模式----主机作为接收方

2、设备地址的作用

用于在IIC总线上唯一标识每个从设备,以便主设备能够正确地与特定从设备进行通信。通过设备地址,主设备可以向特定的从设备发送数据或请求数据,从而实现设备之间的通信和数据交换。设备地址通常是一个唯一的数字或编码,每个从设备都有一个独特的地址,主设备根据这个地址来识别和访问相应的从设备。

三、AT24COX

1、 AT24C02介绍

AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息
存储介质:E2PROM
通讯接口:I2C总线
容量:256字节

2、硬件原理图

3、设备地址

写模式设备地址:OxA0

读模式设备地址:OxA1

2、时序单元

1、起始条件

在I2C 总线处于空闲状态时:SCL和SDA都处于高电平状态,是由SCL和SDA由外挂的上拉电阻拉高至高电平,总线处于平静的高电平状态。
主机需要进行数据收发时,当从机捕获到SCL高电平,SDA下降沿信号时,就会进行自身的复位,等待主机的召唤。然后在SDA下降沿之后,主机要再把SCL拽下来,拽下SCL:1、占用总线,2、方便拼接。

2、终止条件

SCL先放手,回到高电平;SDA再放手,回到高电平,产生一个上升沿。上升沿触发终止条件,同时终止条件之后,SCL和SDA都是高电平。

3、起始条件和终止代码实现

这些是封装的函数,还是对SCL、SDA的操作,根据时序看配置低电平还是高电平。

4、发送一个字节

主机如果想发送0,就拉底SDA到低电平;如果想发送1,就放手,SDA回到高电平,在SCL低电平期间,允许改变SDA的电平。当这一位的数据放好之后,主机就松手时钟线,SCL回到高电平。在高电平期间,是从机读取SDA的时候,所以高电平期间,SDA不允许变化。SCL处于高电平之后,从机需要尽快地读取SDA,一般在上升沿这个时刻,从机就已经读取完成了。主机在放手SCL一段时间后,就可以继续拉低SCL,然后传输下一位。

5、接收一个字节

SCL低电平期间,从机将数据位依次到SDA线上(高位先行),然后释放SCL,主机在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化。

6、发送应答和接收应答

• 发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

• 接收应答:主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA

四、AT24COX代码实现

指定地址写

对于指定设备(Slave Address),在指定地址(Reg Address)下,
写入指定数据(Data)
void AT24C02_W_REG(uint8_t adress,uint8_t data)   //指定地址写
{MyI2C_Start();  //起始条件MyI2C_SendByte(AT24C02_ADDR_W);  //指定从机设备写的地址:10100000MyI2C_ReceiveAck();   //主机接收从机的应答  判断从机是否收到MyI2C_SendByte(adress);//指定内部地址MyI2C_ReceiveAck(); MyI2C_SendByte(data); //写入的数据MyI2C_ReceiveAck();MyI2C_Stop();
}

指定地址读

对于指定设备(Slave Address),在当前地址指针指示的地址下,
读取从机数据(Data)
uint8_t AT24C02_R_REG(uint8_t adress)  //指定地址读
{uint8_t data;MyI2C_Start();  //起始条件MyI2C_SendByte(AT24C02_ADDR_W);  //指定从机设备写的地址:10100000MyI2C_ReceiveAck();   //主机接收从机的应答  判断从机是否收到MyI2C_SendByte(adress);//指定内部地址MyI2C_Start();  //起始条件MyI2C_SendByte(AT24C02_ADDR_R);//读从机的数据MyI2C_ReceiveAck();  //接收应答,从机开始发数据data = MyI2C_ReceiveByte();  //主机接收数据MyI2C_SendAck(1);//参数1:不给从机应答MyI2C_Stop();return data;
}

这篇关于基于STM32F401RET6智能锁项目(AT24C0X存储芯片)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986602

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免