芯片介绍: 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 )
{
}
}