STM32的IIC存儲和讀取整形數據

STM32的IIC存儲和讀取整形數據,

下面的程序代碼是使用stm32F03ZET6的I2C1(PB6,PB7)和AT24C02的EEPROM來測試的。希望對於需要的朋友有幫助。

主要代碼如下:

#include "delay.h"
#include "stm32f10x.h"
#include "usart.h"
#include "24cxx.h"	 

void readNInt(u16 addr,int *buf,int len);		 	
void writeOneInt(u16 addr,int data);
int readOneInt(u16 addr);
void writeNInt(u16 addr,int arr[],int len);
int arr[] = {1222,1223,1224,1225,1226};
int buf[5] = {0};
char j = 0;
 int main(void)
 {	 
	delay_init();	    	 //延時函數初始化	  
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組爲組
	uart_init(115200);	 	//串口初始化爲115200 	 	
	AT24CXX_Init();			//IIC初始化 
	
 	while(AT24CXX_Check())//檢測不到24c02
	{
			printf("AT24C02 filed\r\n");
	}
	printf("AT24c02 is ok\r\n");


    /*測試向EEPROM中寫入和讀取一個整形數的程序*/  
	writeOneInt(2,1024);
	delay_ms(1000);
	printf("read result is %d\r\n",readOneInt(2));

    /*測試寫入和讀取N個整形數的測試程序*/
	writeNInt(100,arr,5);
	delay_ms(1000);
	readNInt(100,buf,5);
	for(j=0;j<5;j++)
	{
		printf("%d\t",buf[j]);
	}
	printf("\r\n");
	while(1)
	{
		
	}
}

//功能:向EEPROM指定的地址寫一個整形數
//參數:addr:寫入地址
//			data:寫入的數據
void writeOneInt(u16 addr,int data)
{
	char tmp = 0,i = 0;
	for(;i<4;i++)
	{
		tmp = (char)(data & 0xFF);
		AT24CXX_WriteOneByte(addr,tmp);
		data = data >> 8;
		addr++;
	}
}

//功能:在EEPROM中的指定地址讀取一個整形數
//參數:addr:地址
int readOneInt(u16 addr)
{
	int tmp = 0;
	char i = 0;
	for(;i<4;i++)
	{
		tmp = tmp | (AT24CXX_ReadOneByte(addr) << (i*8)) ;
		addr++;
	}
	return tmp;
}

//功能:向EEPROM指定的地址寫N個整形數
//參數:addr:寫入地址
//		  arr:要寫入數據所在的緩衝區
//			len:寫入的個數
void writeNInt(u16 addr,int *arr,int len)
{
	char i = 0;
	for(;i<len;i++)
	{
		writeOneInt(addr,*(arr +i));
		addr += 4;
	}
}

//功能:向EEPROM指定的地址讀N個整形數
//參數:addr:讀取地址
//		  arr:讀取數據要保存的緩衝區
//			len:讀取的個數
void readNInt(u16 addr,int *buf,int len)
{
	char i = 0;
	for(;i<len;i++)
	{
		buf[i] = readOneInt(addr);
		addr += 4;
	}
}




















 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章