STM32使用硬件I2C读写AT24C02 EEPROM(一)

文章目录

  • 一、软件准备
    • 配置I2C接口:
    • 生成工程代码:
  • 二、编写驱动程序
    • 初始化I2C接口:
    • 编写读写函数:
  • 三、调试与测试

前面讲到使用软件模拟i2c读写AT24C02,这篇文章使用stm32 提供的硬件i2c读写,看看怎么回事

一、软件准备

配置I2C接口:

打开STM32CubeMX,选择STM32系列的芯片型号。
在“Pinout & Configuration”选项卡中,选择一个可用的I2C接口,并配置相应的SDA和SCL引脚。
在“Configuration”选项卡中,设置I2C的工作模式、时钟源和时钟速率等参数。
在这里插入图片描述

生成工程代码:

配置完成后,生成MDK-ARM工程。

二、编写驱动程序

初始化I2C接口:

在STM32CubeMX生成的初始化代码中,已经包含了I2C接口的初始化代码。可以通过调用HAL_I2C_Init函数来初始化I2C接口。
在这里插入图片描述

编写读写函数:

写数据:使用HAL_I2C_Mem_Write函数向AT24C02写入数据。需要指定EEPROM的设备地址、寄存器地址(即存储单元地址)、数据长度和数据内容。
读数据:使用HAL_I2C_Mem_Read函数从AT24C02读取数据。同样需要指定设备地址、寄存器地址和数据长度,函数会返回读取到的数据。
以下是一个简单的读写示例代码:

// AT24C02的写地址和读地址(根据数据手册和原理图确定)
#define AT24C02_ADDR_WRITE 0xA0
#define AT24C02_ADDR_READ 0xA1

// 向AT24C02写入一个字节数据
uint8_t AT24C02_Write_Byte(uint16_t addr, uint8_t data)
{
return HAL_I2C_Mem_Write(&hi2c2, AT24C02_ADDR_WRITE, addr, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
}
// 从AT24C02读取一个字节数据
uint8_t AT24C02_Read_Byte(uint16_t addr, uint8_t *data)
{
return HAL_I2C_Mem_Read(&hi2c2, AT24C02_ADDR_READ, addr, I2C_MEMADD_SIZE_8BIT, data, 1, HAL_MAX_DELAY);
}

int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
uint8_t write_data = 0xAB;
uint8_t read_data = 0;
uint16_t eeprom_address = 0x00; // EEPROM中的存储单元地址
// 向EEPROM写入数据
if (AT24C02_Write_Byte(eeprom_address, write_data) == HAL_OK)
{
printf(“Write ok\n”);
}
else
{
printf(“Write fail\n”);
}
// 延时,确保EEPROM完成写入操作
HAL_Delay(10);
// 从EEPROM读取数据
if (AT24C02_Read_Byte(eeprom_address, &read_data) == HAL_OK)
{
printf(“Read ok, read_data = 0x%02X\n”, read_data);
}
else
{
printf(“Read fail\n”);
}
while (1)
{
// 主循环,可以添加其他操作
}
}

三、调试与测试

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gin入门教程(3):创建第一个 HTTP 服务器

首先设置golang github代理,可解决拉取git包的时候,无法拉取的问题: export GOPROXYhttps://goproxy.io再查看自己的go版本: go version我这里的版本是:go1.23.2 linux/arm64 准备工作做好之后就可以进行开发了 3.…

【AscendC算子开发】笔记1 算子开发哲学

重看这门课,有很多内容的认识更深了,做一些记录。 为什么不能将网络节点融合 这个问题关联到另一个问题:为什么我们需要激活函数? 使用线性的神经元堆叠得到的方程最后也是线性方程,无法表征非线性的信息&#xff0c…

软考(网工)——网络安全

文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …

Node.js:深入探秘 CommonJS 模块化的奥秘

在Node.js出现之前,服务端JavaScript基本上处于一片荒芜的境况,而当时也没有出现ES6的模块化规范。因此,Node.js采用了当时比较先进的一种模块化规范来实现服务端JavaScript的模块化机制,它就是CommonJS,有时也简称为C…

react18中使用redux管理公共数据仓库实现数据immutable更新

Immutable.js出自Facebook,是最流行的不可变数据结构的实现之一。它实现了完全的持久化数据结构,使用结构共享。所有的更新操作都会返回新的值,但是在内部结构是共享的,来减少内存占用。Immutablejs官网 在上一篇介绍redux的文章&…

数字IC后端实现 | Innovus各个阶段常用命令汇总

应各位读者要求,小编最近按照Innovus流程顺序整理出数字IC后端项目中常用的命令汇总。限于篇幅,这次只更新到powerplan阶段。有了这份Innovus常用命令汇总,学习数字IC后端从此不再迷路!如果大家觉得这个专题还不错,想继…

实验:使用Oxygen发布大型手册到Word格式

此前,我曾发表过一篇文章《结构化文档发布的故事和性能调优》,文中讨论了在将大型DITA手册转换为PDF格式时可能遇到的性能挑战及相应的优化策略。 近日,有朋友咨询,若将同样的大型手册输出为MS Word格式,是否也会面临…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息,包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息,此处生成2万名学生,学生所有信息都是给定范围后随机生成。 生成学生信息后,再来对学生信息进行简单查询。…

Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发,主要涵盖以下几个方面: 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…

探寻闲鱼libsgmain加解密算法(4) ——JNI入口跳转

关注我的人都知道我一直在学习阿里的加密和算法,除了研究逆向问题,还会把学来的阿里技术用在自己的应用上。 为什么?因为学习大厂的应用,是进步最快的方法。而大厂在安全和加密方面的技术,个人觉得阿里做的是最好的。 …

个体能量的勇气层级是否容易达到?

没有勇气面对现实,没有勇气改变自我,没有勇气改变环境,没有勇气创新创造。 这是常态。 如何找寻高质量免费机器人工程资源自学提升-CSDN博客 个人能力的提升,也包括个体能量的提升。 个体能量是个人能力的一个非常重要的衡量指…

Spring Boot整合Stripe订阅支付指南

在当今的在线支付市场中,Stripe 作为一款一体化的全球支付平台,因其易用性和广泛的支付方式支持,得到了许多企业的青睐。本文将详细介绍如何在 Spring Boot 项目中整合 Stripe 实现订阅支付功能。 1.Stripe简介 Stripe 是一家为个人或公司提…

C语言实现Go的defer功能

之前笔者写了一篇博文C实现Go的defer功能,介绍了如何在C语言中实现Go的defer功能,那在C语言中是否也可以实现这样的功能呢?本文就将介绍一下如何在C语言中实现Go的defer功能。 我们还是使用C实现Go的defer功能中的示例: void te…

【每日一题】LeetCode - 判断回文数

今天我们来看一道经典的回文数题目,给定一个整数 x ,判断它是否是回文整数。如果 x 是一个回文数,则返回 true,否则返回 false。 回文数 是指从左往右读和从右往左读都相同的整数。例如,121 是回文,而 123 …

nuxt3项目创建

安装 npx nuxilatest init <project-name> 此时会出现报错&#xff0c;需要在host文件中加入 185.199.108.133 raw.githubusercontent.com 再次执行命令&#xff0c;进入安装 此处选择npm&#xff0c;出现下图表示安装成功 启动项目 执行npm run dev&#xff0c;访…

《皮革制作与环保科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《皮革制作与环保科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《皮革制作与环保科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国轻工业联合会 …

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

已解决 django.db.utils.OperationalError: (1051, “Unknown table

报错信息&#xff1a; django.db.utils.OperationalError: (1051, "Unknown table bjybolg.tool_submission")python manage.py migrate --fake 命令用于告诉 Django 假装已经应用某个迁移&#xff0c;而不实际执行该迁移的操作。这通常在以下情况下非常有用&#x…

【大模型理论篇】大模型压缩技术之注意力层剪枝以及与MLP层联合剪枝

1. 背景分析 本来打算写一篇关于大模型蒸馏的文章&#xff0c;但刚好看到近期发表的一篇讨论大模型压缩的文章【1】&#xff0c;是关于注意力机制冗余性的讨论&#xff0c;比较有意思&#xff0c;作者分析得出并不是所有的注意力都是必须的&#xff0c;可以通过对模型去除冗余的…

鸿蒙中富文本编辑与展示

富文本在鸿蒙系统如何展示和编辑的&#xff1f;在文章开头我们提出这个疑问&#xff0c;带着疑问来阅读这篇文章。 富文本用途可以展示图文混排的内容&#xff0c;在日常App 中非常常见&#xff0c;比如微博的发布与展示&#xff0c;朋友圈的发布与展示&#xff0c;都在使用富文…