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

STM32读写EEPROM

代码如下

#include "i2c.h"
#include <string.h>/* M24C64设备地址(A0/A1/A2接地,7位地址为0x50,左移1位后为0xA0) */
#define EEPROM_ADDR           (0x50 << 1)
#define M24C64_PAGE_SIZE      32          // 页面大小:32字节
#define M24C64_WRITE_DELAY_MS 5           // 写入周期:5毫秒
#define EEPROM_PARAM_ADDR     0x0000      // EEPROM参数存储起始地址// 参数结构体定义
typedef struct {uint8_t data[256]; // 数据缓冲区:256字节
} Param_t;/*** @brief  向M24C64 EEPROM写入Param_t结构体数据* @param  hi2c: I2C句柄指针* @param  param: 指向要写入的Param_t结构体的指针* @retval HAL_StatusTypeDef: HAL_OK表示成功,HAL_ERROR表示失败*/
HAL_StatusTypeDef EEPROM_WriteParam(I2C_HandleTypeDef *hi2c, Param_t *param)
{uint8_t *data = (uint8_t *)param; // 将结构体转换为字节数组uint16_t size = sizeof(Param_t);  // Param_t结构体大小(256字节)uint16_t addr = EEPROM_PARAM_ADDR; // 当前内存地址uint16_t bytes_written = 0;       // 已写入字节计数while (bytes_written < size) {// 计算当前页面剩余字节数uint16_t page_remain = M24C64_PAGE_SIZE - (addr % M24C64_PAGE_SIZE);// 确定本次写入的块大小(取剩余数据或页面剩余空间的最小值)uint16_t chunk_size = (size - bytes_written) > page_remain ? page_remain : (size - bytes_written);// 准备16位地址字节(高字节在前)uint8_t addr_bytes[2] = { (uint8_t)(addr >> 8), (uint8_t)(addr & 0xFF) };// 合并地址和数据到缓冲区uint8_t buffer[M24C64_PAGE_SIZE + 2];buffer[0] = addr_bytes[0];buffer[1] = addr_bytes[1];memcpy(&buffer[2], &data[bytes_written], chunk_size);// 向EEPROM写入数据if (HAL_I2C_Master_Transmit(hi2c, EEPROM_ADDR, buffer, chunk_size + 2, HAL_MAX_DELAY) != HAL_OK) {return HAL_ERROR;}// 等待EEPROM写入周期完成
        HAL_Delay(M24C64_WRITE_DELAY_MS);// 更新地址和已写入字节数bytes_written += chunk_size;addr += chunk_size;}return HAL_OK;
}/*** @brief  从M24C64 EEPROM读取Param_t结构体数据* @param  hi2c: I2C句柄指针* @param  param: 指向存储读取数据的Param_t结构体的指针* @retval HAL_StatusTypeDef: HAL_OK表示成功,HAL_ERROR表示失败*/
HAL_StatusTypeDef EEPROM_ReadParam(I2C_HandleTypeDef *hi2c, Param_t *param)
{uint8_t data[sizeof(Param_t)]; // 存储原始数据的缓冲区uint16_t mem_addr = EEPROM_PARAM_ADDR; // 读取起始地址// 从EEPROM读取数据if (HAL_I2C_Mem_Read(hi2c, EEPROM_ADDR, mem_addr, I2C_MEMADD_SIZE_16BIT, data, sizeof(Param_t), HAL_MAX_DELAY) != HAL_OK) {return HAL_ERROR;}// 将原始数据复制到Param_t结构体memcpy(param, data, sizeof(Param_t));return HAL_OK;
}/*** @brief  测试EEPROM的写入和读取功能* @param  无* @retval 无*/
void EEPROM_Test(void)
{Param_t write_param; // 用于写入测试的结构体Param_t read_param;  // 用于读取测试的结构体// 用测试数据填充write_param(0到255的循环模式)for (uint16_t i = 0; i < sizeof(Param_t); i++) {write_param.data[i] = (uint8_t)(i % 256);}// 向EEPROM写入数据printf("正在写入数据到EEPROM...\n");if (EEPROM_WriteParam(&hi2c2, &write_param) == HAL_OK) {printf("写入成功!\n");} else {printf("写入失败!\n");}// 从EEPROM读取数据printf("正在从EEPROM读取数据...\n");if (EEPROM_ReadParam(&hi2c2, &read_param) == HAL_OK) {printf("读取成功!\n");} else {printf("读取失败!\n");}
}

c14d15e92ebd062ab57bcc9203534d94

 

相关文章:

STM32读写EEPROM

代码如下#include "i2c.h" #include <string.h>/* M24C64设备地址(A0/A1/A2接地,7位地址为0x50,左移1位后为0xA0) */ #define EEPROM_ADDR (0x50 << 1) #define M24C64_PAGE_SIZE 32 // 页面大小:32字节 #define M24C64_WR…...

OpenStack Nova 创建虚拟机

创建虚拟机的过程是一个经典的分布式、异步、状态驱动的工作流。其核心设计哲学是:API 接收请求 -> 调度决策 -> 资源分配 -> 虚拟化层执行。整个过程涉及多个 Nova 服务以及外部组件(Glance, Neutron, Cinder, Keystone)。 1、基本流程 sequenceDiagramparticipan…...

AI革命2025:新一代人力资源管理系统十大标杆产品评测

导读:在数字化浪潮推动下,AI与移动技术正在重塑人力资源管理系统的行业格局。本文盘点了2025年中国市场十款主流智能人力资源管理系统,涵盖集团型、成长型及中小企业的核心需求。重点介绍红海eHR在AI智能体、移动端全流程和数据驱动决策上的创新优势,并通过多维度评分与场景…...

企业HR系统选型全指南:百人初创到万人集团的数字化方案与实施路径

导读:本篇文章围绕企业不同规模的人力资源管理需求,梳理了从百人初创到万人集团的HR系统选型逻辑。通过分层痛点分析、科学评估体系、信息密集对比表和真实案例,并系统推荐了包括i人事、北森、红海云在内的多款市场热门产品,助力企业高效推进HR数字化转型。本文属于深度内容…...

C++ auto关键字

C++ auto关键字的原理与使用auto关键字: 一、C++98标准auto关键字的作用和C语言的相同,表示自动变量,是关于变量存储位置的类型饰词,通常不写,因为局部变量的默认存储就是auto 1 void foo(void) 2 { 3 int a; //变量存储在栈区 4 auto int b; //…...

API 响应体加密场景下的调试实践:Postman 的局限与 Apipost 的优化

在日常开发和测试过程中,我们经常会遇到如下场景: 后端服务出于安全性或协议规范的考虑,对 API 的响应体进行了加密或编码处理,例如 Base64 编码、AES/RSA 加密等。这样做在生产环境中是合理且必要的,能够避免敏感数据被明文传输。但与此同时,也为开发和测试阶段的调试带…...

ARM主板:低功耗高性能的嵌入式计算核心

在当今数字化飞速发展的时代,计算机硬件领域不断创新变革,其中ARM主板凭借其独特的优势脱颖而出,成为众多应用场景的理想选择。无论是智能家居、工业自动化还是物联网设备等,都能看到它活跃的身影。下面将深入探讨ARM主板的相关特性、优势以及广泛的应用场景。 什么是ARM主…...

2025绩效管理必知

HR 往往是一个企业绩效管理的推动者,但是在推动的背后,实际有一个非常重要的目标,那就是提高个人和团队的绩效,从而提升企业整体的绩效。绩效管理就是要找到 “应该实现什么 “和 “如何实现 “这些问题的答案。它是关于寻找更有效的方法来提高业务绩效。 绩效管理关注什么…...

【刷题笔记】cf808f

CF803F 场上死磕无法战胜,原来是个绿题吗哈哈。 考虑到跟序列的顺序无关,直接在值域上做。我们设 \(f_i\) 表示 \(\gcd = i\) 的方案数。那么有 \[f_i = 2^{g_i} - 1 - \sum_{i | d \land i \ne d} f_d \]\(g_i\) 是原序列中是 \(i\) 倍数的个数。那么调和级数 \(O(V\log V)\…...

Laravel APP_DEBUG=true:存在账户信息泄露风险

Laravel APP_DEBUG=true:存在账户信息泄露风险 在 Laravel 开发过程中,APP_DEBUG=true 是一个高频使用的配置 —— 它能在代码报错时显示详细的堆栈跟踪、变量值和配置信息,极大提升调试效率。但鲜少有人意识到,若将开启调试模式的项目部署到生产环境,会直接沦为账户信息泄…...

将当前目录下的所有文件 / 目录完整复制到/tmp目录,且会保留文件的权限、所有者、时间戳等属性

tar cvf - * | (cd /tmp && tar xvfp -)...

C# 操作 DXF 文件指南

C# 操作 DXF 文件主要借助一些专业的库来解析其结构并处理其中的图形数据。 C# 操作 DXF 文件指南 摘要 通过 C# 操作 AutoCAD 导出的 DXF 文件,你可以实现图纸的读取、编辑、创建和转换。本指南将介绍两个主流的开源库 netDxf 和 DXF.NET (IxMilia.Dxf),并提供核心代码示例、…...

在Proxmox中部署Security Onion的安全配置实战

本文详细记录了在Proxmox虚拟化环境中部署Security Onion网络监控系统的完整过程,重点解决了官方文档未涉及的网桥配置问题,包括创建无IP嗅探接口、Linux网桥设置及虚拟机网络设备配置等关键技术环节。在Proxmox中部署Security Onion的安全配置实战 文档说明 Security Onion项…...

报表到 BI:企业数据从展示到决策的进阶之路

报表与BI分析:从数据展示到决策洞察的进化之路 企业数字化转型的浪潮里,“数据驱动决策” 早成共识,可不少企业仍在 “报表” 与 “BI 分析” 的迷雾里打转:是替代,还是互补?为何满墙报表难寻洞察?为何 BI 工具常被业务部门当作 “数据探索的钥匙”?本文从本质差异、能…...

抢先体验智能测试时代,QA必备AI测试工具

敏捷开发模式下的测试挑战 敏捷开发模式下,业务快速迭代,给测试团队带来了前所未有的压力。每一次功能升级或系统迁移,都意味着从功能测试、兼容性测试、性能测试到安全性的大规模回归验证。测试规模成倍增长,而团队人力却往往难以及时扩充。 再加上多设备、多系统环境下频…...

Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)

本文分享自天翼云开发者社区《Flink 与Flink可视化平台StreamPark教程(DataStreamApi基本使用)》,作者:l****n DataStreamApidataStreamApi是一切的基础,处于调度flink程序处理任务的起点。Flink 有非常灵活的分层 API 设计,其中的核心层就是 DataStream/DataSet API。由…...

内部排序-直接插入排序

内部排序-直接插入排序内部排序-直接插入排序 写在前面:参考《数据结构(C语言版)》严蔚敏 吴伟民 编著 清华大学出版社 2008年10月第27次印刷 📋 算法概述 直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排号序的…...

玩转n8n测试自动化:核心节点详解与测试实战指南

掌握节点,掌握自动化测试的核心 在n8n中,节点(Node)是构建自动化工作流的基础单元。每一个节点都代表一个特定的操作或功能,通过将不同的节点连接起来,我们就能创造出强大的测试自动化流程。本章将深入讲解测试工程师必须掌握的几类核心节点,并通过实际测试场景展示如何…...

Linux:龙晰系统(Anolis)更新yum(dnf)仓库源

一、备份现有仓库源 1. 查看当前系统版本 cat /etc/os-release2. 备份现有仓库源 # 一共两个文件,都需要备份下:AnolisOS-BaseOS.repo AnolisOS-AppStream.repo cp /etc/yum.repos.d/AnolisOS-BaseOS.repo /etc/yum.repos.d/AnolisOS-BaseOS.repo.bak cp /etc/yum.repos.d/…...

(笔记)多项式基础 FFT

多项式 \[F(x)=\sum_{i=0}^{i-1}a_ix^i \]对多项式进行乘法,就是对两个多项式进行加法卷积。其中卷积结果 \(C(k)=\sum_{i=0}^kA(i)B(k-i)\)。 分治乘法 将 \(A(x)\) 左右拆半,不足则末尾(最高位)补上 \(0\),令 \(n=2^k\)。则 \[A(x)=A_0(x)+x^{n/2}A_1(x) \]\[A_0(x)=\su…...

MAC tomcat启动报错

MAC tomcat启动报错 org/apache/catalina/startup/Bootstrap has been compiled by a more recent前言 配置好tomcat启动报错 已连接到地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机 已与地址为 127.0.0.1:50303,传输: 套接字 的目标虚拟机断开连接 Exception in thread…...

研究生-必看-倒计时3天/武汉科技大学主办/稳定EI会议/高层次教授出席报告

武汉科技大学主办/EI稳定检索/大数据与智慧医学📢大数据与智慧医学国际学术会议(BDIMed 2025) 🔍武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 🔍征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像…...

LGP7113 [NOIP 2020] 排水系统 学习笔记

LGP7113 [NOIP 2020] 排水系统 学习笔记 Luogu Link 题意简述 给定一个 \(n\) 个点的 \(\texttt{DAG}\)。我们认为它是一个排水系统。 节点 \(u\) 有 \(d_u\) 条输出管道,污水会被平分成 \(d_u\) 份流向下家节点。特别的,\(d_u=0\) 时认为这个节点直通污水厂,是一个最终排水…...

MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1

问题:MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... for column FieldName at row 1 原因:在 MySQL 中遇到错误 MySqlException: Incorrect string value: \xE6\x99\xBA\xE8\x83\xBD... 通常是由于尝试将一个不兼容的字符编码插入到数据库中导致的。…...

Burp Suite Professional 2025.9 发布 - Web 应用安全、测试和扫描

Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描Burp Suite Professional 2025.9 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities 请访问原文链接:https://sysi…...

SQL Server 2022 RTM 累积更新 #21 发布

SQL Server 2022 RTM 累积更新 #21 发布SQL Server 2022 RTM 累积更新 #21 发布 Microsoft SQL Server 2022 RTM GDR & CU21 (2025 年 9 月更新) relational database management system (RDBMS) & Transact-SQL (T-SQL) 请访问原文链接:https://sysin.org/blog/sql-s…...

针对WPF的功耗优化(节能编程)

一、UI渲染优化 1. 减少不必要的视觉元素<!-- 避免过度使用复杂效果 --> <Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 --> </Border><!-- 而…...

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

微算法科技(NASDAQ: MLGO)开发Rollup技术,探索区块链扩展性解决方案

随着区块链技术的广泛应用,其扩展性问题逐渐成为制约行业发展的核心瓶颈。传统区块链架构在高频交易场景下,因链上资源有限,导致交易确认时间长、手续费高昂,难以满足商业级应用需求。为解决这一痛点,微算法科技(NASDAQ: MLGO)基于状态通道技术积累,进一步研发Rollup技…...

征稿倒计时3天/武汉科技大学主办/医学人工智能/现可享优惠

📢大数据与智慧医学国际学术会议(BDIMed 2025) 📮武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 📆征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像和信息学 等方向均可投递 🔥参会多元化:投稿…...

生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!

本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。作者:执少 对,这是一篇你明知道怎么回事儿,但还是会点进来看的文章! 本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构…...

NOI linux使用教程

一、配置NOI linux环境为中文 1. 桌面右键setting 2.下拉找到地区&语言,点击Manage Installed Languages 3. 选择安装其他语言包Install / Remove Languages 4. 勾选简体中文Chinese (simplified) 5. 输入密码后确认 6. 等待安装即可 7. 安装完后,选择语言下拉选项中的中…...

springboot 文件处理框架

-------------------------------------------------------------------------------------------Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:EasyExcel:是阿里巴巴开源…...

Docker:龙晰系统(Anolis)更新yum源下载docker

一、配置Docker的yum库 1. 查看系统版本 # 查看系统版本 cat /etc/os-release2. 配置系统yum源 这里可以看我的另一篇文章: 3. 卸载旧版docker与podman 重点:podman与docker冲突!!龙蜥Anolis Linux默认安装Podman作为容器管理工具,这是由于Podman是Red Hat(龙蜥的开发者之…...

针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现

针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现 一、SISO系统MPC实现 1. 系统建模与离散化 % 传递函数定义(二阶惯性环节) s = tf(s); G = 1/(s^2 + 2*s + 1); Ts = 0.1; % 采样时间 Gd = c2d(G, Ts, zoh); % 离散化关键参数:…...

vue3中父子组件数据同步的默认方式update:xxx

update:xxx 是Vue 3中实现自定义v-model的约定。它的工作原理是: 子组件通过emit(update:propName, newValue)通知父组件需要更新某个属性父组件可以通过v-model:propName="data"或@update:propName="data = $event"来接收这个更新 父组件:<template&…...

解决 C# 当另一个read操作挂起时不能调用read方法的问题

life runs on code作者: zhaotianff转载请注明出处...

AI辅助编程_工具和方式

AI编程AI 编程 这个时代的方式定义问题、建构系统、引导协作 方式 1. Copilot 模式:你写头它写尾 2. Agent 模式:你说话,它写程序 “氛围感编程” 产品形态插件和IDE两种 模式 :问答模式(Ask)、文件编辑模式(Edit)、智能体模式(Agent) 国内百度 腾讯: https://c…...

[完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践

在人工智能技术飞速发展的今天,大型语言模型(LLM)已成为推动创新的核心驱动力。对于Java开发者而言,掌握大模型工程能力不再是一种选择,而是一种必需。LangChain4j作为专为Java开发者设计的工具库,正在成为连接传统Java工程与大模型应用的重要桥梁。参考资料:/s/1kSb5z5…...

k8s源码分析——kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...

将 seata 2.5 发布到私服

将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...

一些感悟

1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...

五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?

在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...

ubuntu历史版本下载

https://old-releases.ubuntu.com/releases/LTS版本:...

读书笔记:数据库索引的智能优化:反向键与降序索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...

零成本搭建企业系统:五款免费低代码平台推荐

概述 在数字化转型的背景下,低代码平台正成为企业快速构建信息系统的重要工具。它们通过可视化、组件化的方式,大幅降低了开发门槛和时间成本,即使没有编程背景的业务人员也能参与系统搭建。本文将为大家推荐五款值得尝试的免费低代码平台,帮助中小团队或个人实现零成本高效…...

故障处理:access$表在数据库丢失的恢复

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障处理:access$表在数据库丢失的恢复 下面是测试一把access$基表丢失…...

从需求出发:教你判断选斑斑还是织信

斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。​在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...

PLC结构化文本设计模式——建造者模式(Builder Pattern)

PLC Structured Text Design Patterns PLC结构化文本设计模式——建造者模式(Builder Pattern) 介绍 建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离…...