芯片介紹: 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