【单片机】DS2431,STM32,EEPROM读取与写入
芯片介绍: https://qq742971636.blog.csdn.net/article/details/132164189
接线


串口结果:

部分代码:
#include "sys.h"
#include "DS2431.h"unsigned char serialNb[8];
unsigned char write_data[128];
unsigned char read_data[128];
unsigned char status;unsigned char position[5] = { 12, 41, 65, 89, 12 };
unsigned char position_data[5];int main( void )
{int idx = 0;/* 初始化write_data 装ascii */for ( idx = 0; idx < 128; idx++ ){write_data[idx] = idx;}Stm32_Clock_Init( 9 ); /* 系统时钟设置 */uart_init( 72, 9600 ); /* 串口初始化为9600 */delay_init( 72 ); /* 延时初始化 */status = DS2431_Init();printf( "DS2431_Init status: %d\r\n", status );if ( DS2431_ReadRom( serialNb ) == 0 ){printf( "DS2431 found with serial number: %02X %02X %02X %02X %02X %02X %02X %02X\r\n", serialNb[0], serialNb[1],serialNb[2], serialNb[3], serialNb[4], serialNb[5], serialNb[6], serialNb[7] );} else {printf( "DS2431_ReadRom failed,请检查硬件连线 \r\n" );while ( 1 );}/* Check serial number CRC */if ( crc8( serialNb, 7 ) != serialNb[7] ){printf( "A DS2431 was found but the serial number CRC is invalid.\r\n" );while ( 1 );} else {printf( "CRC8 校验通过,器件处于正常工作中。 \r\n" );}/* 随机挑选几个位置写入数据0x55 */for ( idx = 0; idx < 5; idx++ ){status = DS2431_WriteByte( position[idx], 0x55 );if ( status == 0 ){printf( "ds2431的第%d个位置写入成功,写入数据为0x55。 \r\n", position[idx] );} else {printf( "ds2431的第%d个位置写入失败,错误码为%d。 \r\n", position[idx], status );}}/* 读取这几个位置的数据 */for ( idx = 0; idx < 5; idx++ ){status = DS2431_ReadByte( position[idx], position_data + idx );if ( status == 0 ){printf( "ds2431的第%d个位置读取成功,读取到的数据为0x%02X。 \r\n", position[idx], position_data[idx] );} else {printf( "ds2431的第%d个位置读取失败,错误码为%d。 \r\n", position[idx], status );}}delay_ms( 100 );printf( "************************************************ \r\n" );printf( "************************************************ \r\n" );printf( "读取128个字节中。。。 \r\n" );status = DS2431_ReadMemory( 0, 128, read_data ); /* 从地址0开始读取,读取128个字节 *//* 打印出读取到的数据 */if ( status == 0 ){printf( "读取到的数据为: \r\n" );for ( idx = 0; idx < 128; idx++ ){printf( "%d ", read_data[idx] );}printf( "\r\n" );} else {printf( "读取失败,错误码为%d。 \r\n", status );}/* 清空read_data */for ( idx = 0; idx < 128; idx++ ){read_data[idx] = 0;}delay_ms( 100 );printf( "************************************************ \r\n" );printf( "************************************************ \r\n" );printf( "写入128个字节中。。。 \r\n" );for ( idx = 0; idx < 16; idx++ ){status = DS2431_WriteMemory( idx, write_data + idx * 8 );if ( status == 0 ){printf( "ds2431的第%d个块写入成功,每个块有8个字节。 \r\n", idx );} else {printf( "ds2431的第%d个块写入失败,错误码为%d。 \r\n", idx, status );}}delay_ms( 100 );printf( "************************************************ \r\n" );printf( "************************************************ \r\n" );printf( "读取128个字节中。。。 \r\n" );status = DS2431_ReadMemory( 0, 128, read_data ); /* 从地址0开始读取,读取128个字节 *//* 打印出读取到的数据 */if ( status == 0 ){printf( "读取到的数据为: \r\n" );for ( idx = 0; idx < 128; idx++ ){printf( "%d ", read_data[idx] );}printf( "\r\n" );} else {printf( "读取失败,错误码为%d。 \r\n", status );}/* 清空read_data */for ( idx = 0; idx < 128; idx++ ){read_data[idx] = 0;}printf( "************************************************ \r\n" );printf( "************************************************ \r\n" );printf( "程序已经全部演示完毕,如果需要重新演示,请复位。 \r\n" );while ( 1 ){}
}
代码:https://github.com/xddun/blog_code_search
相关文章:
【单片机】DS2431,STM32,EEPROM读取与写入
芯片介绍: https://qq742971636.blog.csdn.net/article/details/132164189 接线 串口结果: 部分代码: #include "sys.h" #include "DS2431.h"unsigned char serialNb[8]; unsigned char write_data[128]; unsigned cha…...
c++11 标准模板(STL)(std::basic_stringbuf)(一)
定义于头文件 <sstream> template< class CharT, class Traits std::char_traits<CharT>, class Allocator std::allocator<CharT> > class basic_stringbuf : public std::basic_streambuf<CharT, Traits> std::basic_stringbuf…...
flutter开发实战-WidgetsBinding监听页面前台后台退出状态
flutter开发实战-WidgetsBinding监听页面前台后台退出状态 在开发过程中,经常监听页面前台后台退出状态,这里用到了WidgetsBinding 一、WidgetsBinding是什么? WidgetsBinding是Flutter中最重要的Binding之一,它提供了与Widget…...
父进程等待子进程退出 / 僵尸进程孤儿进程
Q:父进程为什么要等待子进程退出? A:回顾创建子进程的目的,就是让子进程去处理一些事情,那么“事情干完了没有”这件事,父进程需要知道并收集子进程的退出状态。子进程的退出状态如果不被收集,…...
【LeetCode 75】第二十六题(394)字符串解码
目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 给我们字符串,让我们解码,那么该怎么解码呢,被括号【】包裹起来的字符串需要扩展成括号左边第…...
UNIX网络编程——TCP协议API 基础demo服务器代码
目录 一.TCP客户端API 1.创建套接字 2.connect连接服务器编辑 3.send发送信息 4.recv接受信息 5.close 二.TCP服务器API 1.socket创建tcp套接字(监听套接字) 2.bind给服务器套接字绑定port,ip地址信息 3.listen监听并创建连接队列 4.accept提取客户端的连接 5.send,r…...
[保研/考研机试] KY163 素数判定 哈尔滨工业大学复试上机题 C++实现
题目链接: 素数判定https://www.nowcoder.com/share/jump/437195121691718831561 描述 给定一个数n,要求判断其是否为素数(0,1,负数都是非素数)。 输入描述: 测试数据有多组,每组输入一个数…...
iOS_crash文件的获取及符号化(解析)
文章目录 1. 使用 symbolicatecrash 解析 .ips 文件:2. 使用 CrashSymbolicator.py 解析 ips 文件3. 使用 atos 解析 crash 文件4. Helps4.1 .ips 文件获取4.2 .crash 文件获取4.3 获取 .dSYM 和 .app 文件4.4 使用 dwarfdump 查询 uuid 5. Tips6. 总结 1. 使用 sym…...
STM32定时器TIM控制
一、CubeMX的设置 1、新建工程,进行基本配置 2、配置定时器TIM2 1)定时器计算公式:(以下两条公式相同) Tout ((ARR1) * PSC1)) / Tclk TimeOut ((Prescaler 1) * (Period 1)) / TimeClockFren Tout TimeOut&…...
网络请求中,token和cookie有什么区别
HTTP无状态,每次请求都要携带cookie,以帮助识别用户身份; 服务端也可以向客户端set-cookie,cookie大小限制为4kb; cookie默认有跨域限制,不跨域共享和传递,例如: 现代浏览器开始禁…...
Javaweb_xml
文章目录 1.xml是什么?2.xml的用途 1.xml是什么? xml 是可扩展的标记性语言 2.xml的用途 1、用来保存数据,而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式(现在 JSON 为主…...
http相关知识点
文章目录 长链接http周边会话保持方案1方案2 基本工具postmanFiddlerFiddler的原理 长链接 一张网页实际上可能会有多种元素组成,这也就说明了网页需要多次的http请求。可由于http是基于TCP的,而TCP创建链接是有代价的,因此频繁的创建链接会…...
【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析
【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析 一、EventHub.cpp 监听 /dev/input/event0 节点流程二、EventHub.cpp 读取 /dev/input/event0 节点数据流程系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总…...
走出迷宫(多组输入bfs)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。 小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#…...
Linux系统编程-终端、进程组、会话
一、终端的概念 在UNIX系统中,用户通过终端登录系统后得到一个Shell进程,这个终端成为Shell进程的控制终端(Controlling Terminal),进程中,控制终端是保存在PCB中的信息,而fork会复制PCB中的信息…...
Linux部分文件操作记录
问题描述 多级文件夹下,有多个同名文件,以及其他无关文件,为了减轻体量,遍历目录,只保留对应文件 首先open terminal here find . -type f \( ! -name algo_imu.bin -a ! -name post_gnss_only_error.log -a ! -name…...
Android系统-进程-Binder2-Java层
引言: 对于Android系统,一般是从java层到native层,再到kernel驱动层,形成一个完整的软件架构。Android系统中的Binder IPC通信机制的整体架构,从java层到底层驱动层是怎么样的一个架构和原理的呢? 概念与…...
体渲染原理及WebGL实现【Volume Rendering】
体渲染(Volume Rendering)是NeRF神经场辐射AI模型的基础,与传统渲染使用三角形来显示 3D 图形不同,体渲染使用其他方法,例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码ÿ…...
VUE3组件
组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构: 这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件…...
【iOS】autoreleasepool
来说一下最近在了解的autoreleasepool吧,我们可能平时书写过许多脑残代码,其有很多的缺陷但是我们可能当时学的比较浅就也不太了解,就像下面这样的: for (int i 0; i < 1000000; i) {NSNumber *num [NSNumber numberWithInt…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
高效的后台管理系统——可进行二次开发
随着互联网技术的迅猛发展,企业的数字化管理变得愈加重要。后台管理系统作为数据存储与业务管理的核心,成为了现代企业不可或缺的一部分。今天我们要介绍的是一款名为 若依后台管理框架 的系统,它不仅支持跨平台应用,还能提供丰富…...
