【单片机】DS2431,STM32,EEPROM读取与写入

这篇具有很好参考价值的文章主要介绍了【单片机】DS2431,STM32,EEPROM读取与写入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

芯片介绍: https://qq742971636.blog.csdn.net/article/details/132164189

DS2431内部有128个字节的数据,这篇博客可以对这128个字节的数据进行读写,而有的人想要改写芯片ROM,这是芯片的唯一地址,请看这里 https://blog.csdn.net/x1131230123/article/details/135667146

接线

【单片机】DS2431,STM32,EEPROM读取与写入,TB作品,单片机,DS2431,EEPROM,STM32

【单片机】DS2431,STM32,EEPROM读取与写入,TB作品,单片机,DS2431,EEPROM,STM32

串口结果:

【单片机】DS2431,STM32,EEPROM读取与写入,TB作品,单片机,DS2431,EEPROM,STM32

部分代码:

#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文章来源地址https://www.toymoban.com/news/detail-644527.html

到了这里,关于【单片机】DS2431,STM32,EEPROM读取与写入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机读取DS18B20温度传感器

    1 .首先我们知道DS18B20是 单总线协议 ,只有一根数据线。所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平。有了这些概念,我们就能进行下一步。                                                图一 (截取

    2024年02月08日
    浏览(40)
  • 51单片机学习--DS18B20温度读取&温度报警器

    需要先编写OneWire模块,再在DS18B20模块中调用OneWire模块的函数 先根据原理图做好端口的声明: 接下来像之前一样把时序结构用代码模拟出来: 至此,OneWire模块就写好了,接下来在DS18B20模块中模拟数据帧: 之后只需要在main中调用即可 接下来进行一些综合的应用:温度报警

    2024年02月14日
    浏览(50)
  • 单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app)

    单片机设计:stm32远程水位检测灌溉系统(水泵+电机驱动+OLED显示屏+水位传感器+防水式ds18b20+光敏传感器+按键+WiFi+手机app) 一、主要功能:    1.水位传感器检测水的高度、光敏传感器检测周围光照强度、ds18b20检测水温 2.0LED、手机app显示当前数据以及阈值 3.手机app远程调节阈值,

    2024年02月05日
    浏览(50)
  • CH32V307VCT6单片机程序写入教程

    之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是 CH32V307 ,之前在论坛上看到他们说这一块单片机和 stm32 系列的单片机差不多,正好今天板子到了我试了一下,发现真的和 stm32 差不多。 很多没有接触过stm32单片机但是白嫖到板子的朋友可能不会用这块板子,

    2024年02月01日
    浏览(40)
  • 【TB作品】MSP430单片机 Proteus仿真 DS18B20温度 LCD1602显示器 温度读取与显示

    效果图如下: 首先,让我们先来说说DS18B20集成电路。 • DS18B20是一款采用OneWire通讯协议的集成电路,因此只需要一条线就可以与微控制器通讯。它不需要额外的电源,但是也有外部电源输入端口。 • OneWire设备具有64位的ROM代码。如我们之前所说,这64位的前8位是家族代码,中间

    2024年02月08日
    浏览(68)
  • GD32单片机和STM32单片机的对比分析

    GD32单片机和STM32单片机都是基于Arm Cortex-M3/M4内核的32位通用微控制器,广泛应用于各种嵌入式系统和物联网领域。两者之间有很多相似之处,但也有一些不同之处,本文将从以下几个方面对比分析两者的特点、优势和开发成本。 GD32单片机采用的是二代的M3/M4内核,而STM32单片

    2024年02月16日
    浏览(61)
  • STM32单片机(一)STM32简介

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(60)
  • STM32单片机(二)STM32环境搭建

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月10日
    浏览(62)
  • STM32单片机开发-01 STM32介绍

    通过野火开发板学习单片机 从内核上分有Cortex-M0、M3、M4 和M7 F1 代表了基础型,基于Cortex-M3 内核,主频为72MHZ F4 代表了高性能,基于Cortex-M4 内核,主频180M。 数据手册:用于芯片选型和设计原理图 参考手册:用于编程时查阅 Icode总线 – 该总线讲M3内核的指令总线与闪存指令

    2024年01月21日
    浏览(62)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库,STM32F103

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包