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;
	}
}




















 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值