蓝桥杯STM32G431RBT6学习——M24C02

news/2024/11/25 2:31:14/

蓝桥杯STM32G431RBT6学习——M24C02

前言

IIC是单片机的通用协议,在蓝桥杯单片机、嵌入式中都是考点。国信长天开发板板载M24C02(IIC驱动)作为调电存储模块,可以通过IIC对其写入数据后,掉电进行保存以供读取。其硬件接线如下:
在这里插入图片描述

M24C02解读

该芯片是一款EEPROM,也就是所谓的调电存储芯片,其使用方式十分简单,在数据手册中也写的非常清晰。
该芯片支持总线控制,通过一个驱动地址完成设备的选定及写入/读取控制,当我们只使用一片EEPROM的时候直接设备号给0即可,不同型号地址如下:
在这里插入图片描述

该芯片具有以下两种写入模式:
1、字节写入: 一次性向EEPROM写入一个字节的数据;
2、片写入: 一次性写入8/16字节的数据(拒绝于芯片内存,详见数据手册)。
该芯片具有以下三种读取模式:
1、当前地址读取: 从数据手册的意思是,直接从上次写入的地址+1的位置进行读取(: The internal data word address counter maintains the last
address accessed during the last read or write operation, incremented by one. );
2、随机读取: 直译过来确实是这个名字,但是没看出半点随机的意思,从指定地址读取一个字节数据;
3、连续读取: 顾名思义能够连续读取多个字节的数据,直到给他发停止信号为止。
在进行检测测试的时候我们可以使用字节写入/读取,当需要进行长数据操作时可以使用片写入、连续读取更方便。

STM32CubeMX配置

在这里插入图片描述
因为使用的是软件IIC,官方也提供了底层驱动,因此直接使能一下引脚就行了,当然其实不配置也行,因为底层驱动中给出了初始化函数。

Keil代码编写

1、字节写入:
在这里插入图片描述
数据手册提供了完整的字节写入说明,但是英语不好还是直接看图吧,流程相当简单,步骤如下:
IIC启动信号->发送写入的设备号(最后一位决定读写)->等待应答->发送写入的地址->等待应答->发送写入的数据->等待应答->IIC停止信号
具体代码如下:

//函数功能:  对M20C02进行字节写入数据  
//函数参数:  参数1:写入的地址,参数2:写入的数据
//函数返回值:写入结果ERROR(失败)/SUCCESS(成功)
unsigned char M24C02_Write(unsigned char addr, unsigned char data)
{I2CStart();					//IIC启动I2CSendByte(0xA0);			//发送写入的设备号if(I2CWaitAck() == ERROR)   //等待应答return ERROR;I2CSendByte(addr);			//发送写入的地址if(I2CWaitAck() == ERROR)	//等待应答return ERROR;I2CSendByte(data);			//发送写入的地址if(I2CWaitAck() == ERROR)	//等待应答return ERROR;I2CStop();					//停止信号return SUCCESS;
}

2、片写入:
在这里插入图片描述
片写入的流程与字节写入基本一致,区别在于每次写入数据以后都需要等待等待应答信号。
具体代码如下:

//函数功能:  对M20C02进行片写入数据  
//函数参数:  参数1:写入的地址,参数2:写入的数据,参数3:数据的长度
//函数返回值:写入结果ERROR(失败)/SUCCESS(成功)
unsigned char M24C02_PageWrite(unsigned char addr, unsigned char *data, unsigned int size)
{I2CStart();I2CSendByte(0xA0);if(I2CWaitAck() == ERROR)return ERROR;I2CSendByte(addr);if(I2CWaitAck() == ERROR)return ERROR;for(int i = 0;i < size;i++)		//区别与字节写入,可以一直写入8/16个数据{I2CSendByte(data[i]);if(I2CWaitAck() == ERROR)return ERROR;}I2CStop();return SUCCESS;
}

3、读取:
与写入方式类似,读取方式也是大同小异,此处记录随机读取的方式(因为这个假读取很无语),需要注意的是假读取以后要重新开始一个IIC信号用于读取的时序。
具体代码如下:

//函数功能:  对M20C02进行字节读取数据  
//函数参数:  读取的地址
//函数返回值:读取成功返回读取到的数据,反之返回ERROR
unsigned char M24C02_Read(unsigned char addr)
{unsigned char data = 'd';I2CStart();I2CSendByte(0xA0);if(I2CWaitAck() == ERROR)return ERROR;I2CSendByte(addr);if(I2CWaitAck() == ERROR)return ERROR;I2CStart();I2CSendByte(0xA1);if(I2CWaitAck() == ERROR)return ERROR;data = I2CReceiveByte();I2CStop();return data;
}

后记

芯片的数据手册确实是一个很重要的东西,学会看数据手册能够有效的完成任务,就是英语不好会些许难受。


http://www.ppmy.cn/news/21566.html

相关文章

想成为数据分析师,看这里,数据分析必备的43个Excel函数

目录 前言 函数分类&#xff1a; 关联匹配类清洗处理类逻辑运算类计算统计类时间序列类 前言 Excel是我们工作中经常使用的一种工具&#xff0c;对于数据分析来说&#xff0c;这也是处理数据最基础的工具。 很多传统行业的数据分析师甚至只要掌握Excel和SQL即可。 对于初学者…

Android中级——滑动分析

SrcollAndroid坐标系视图坐标系常见方法实现滑动layout()offsetLeftAndRight()和offsetTopAndBottom()LayoutParamsscrollTo()与scrollBy()ScrollerVierDragHeplerAndroid坐标系 将屏幕左上角的顶点作为Android坐标系的原点&#xff0c;向右为X轴正方向&#xff0c;向下为Y轴正…

嵌入式开发:为什么物联网正在吞噬嵌入式操作系统?

在过去几年的嵌入式开发中&#xff0c;独立嵌入式软件市场的两大基石已被物联网公司完全吞噬。第一个FreeRTOS被亚马逊吞并&#xff0c;以支持其亚马逊Web服务(AWS)云平台的物联网开发&#xff0c;Express Logic被微软吞并&#xff0c;用于其竞争对手Azure云服务。许多分析师对…

Spring Boot 无侵入式 实现API接口统一JSON格式返回

无侵入式 统一返回JSON格式 其实本没有没打算写这篇博客的&#xff0c;但还是要写一下写这篇博客的起因是因为&#xff0c;现在呆着的这家公司居然没有统一的API返回格式?&#xff0c;询问主管他居然告诉我用HTTP状态码就够用了&#xff08;fxxk&#xff09;&#xff0c;天哪…

C++ 浅谈之智能指针 shared_ptr 循环引用

C 浅谈之智能指针 shared_ptr 循环引用 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是 C 浅谈系列&#xff0c;收录在专栏 C 语言中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些 C 语言重要的语法特…

优化算法:曲径步长通优处,优化半天白优化

本文来自公众号“AI大道理” 训练一个神经网络&#xff0c;我们想要得到误差最小&#xff0c;就是要我们的损失函数最小。 如何得到最小值呢&#xff1f; 这就是优化算法。 梯度下降法是众多优化中的一种。 1、损失函数 2、GD&#xff08;梯度下降法&#xff09; 3、BGD&a…

python输出不重复的字符

项目场景&#xff1a; 输入一个字符串&#xff0c;把最左边的10个不重复的字符&#xff08;大小写算不同字符&#xff09;挑选出来。 如不重复的字符不到10个&#xff0c;则按实际数目输出。问题描述 输出一个字符串&#xff0c;包含字符串s最左边10个不重复的字符。不到10个…

iptables端口复用后门、sslh

iptables端口复用 创建端口复用链 创建端口复用规则将流量转到22端口 开启开关&#xff0c;接收到一个长为1139的icmp包&#xff0c;则将来源ip添加到LETMEIN表中 如果syn包来源ip处于letmein列表中&#xff0c;则跳转到LETMEIN链处理&#xff0c;有效时间为3600秒 开启复…