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

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

接线

串口结果:

部分代码:

go 复制代码
#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

相关推荐
【云轩】2 小时前
基于STM32与IFX007T的电机驱动全解析(无人机/机器人实战)
stm32·机器人·无人机
qq_75568224010 小时前
STM32使用NRF2401进行数据传送
stm32·单片机·嵌入式硬件
FreakStudio16 小时前
开源一款串口舵机驱动扩展板-FreakStudio多米诺系列
单片机·嵌入式·大学生·电子diy
艾格北峰17 小时前
STM32 物联网智能家居 (六) OLED显示设备
arm开发·stm32·单片机·嵌入式硬件·物联网·智能家居
热爱嵌入式的小许20 小时前
STM32 HAL库&标准库+ESP8266+机智云
stm32·单片机·嵌入式硬件·stm32移植机智云·stm32连接机智云·hal库移植机智云·标准库移植机智云
无际单片机编程20 小时前
面对STM32的庞大体系,如何避免迷失在细节中?
java·stm32·单片机·嵌入式硬件·嵌入式开发
【云轩】1 天前
【零基础实战】用STM32玩转DRV8313电机驱动:从原理到无人机/机器人控制
stm32·机器人·无人机
2301_764602231 天前
stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
stm32·单片机·嵌入式硬件
楼台的春风1 天前
PWM(脉宽调制)技术详解:从基础到应用实践示例
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式
深圳市青牛科技实业有限公司 小芋圆1 天前
芯谷D2761:为扬声器保护而生的音频限幅器
人工智能·科技·单片机·嵌入式硬件·机器人·音视频