STM32的IIC存储和读取整形数据

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:28   2270   0

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 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP