HAL库 EEPROM字符串读写

配置I2C 和串口
串口的配置就不做详细介绍

 

 1 #include "stm32f1xx_hal.h"
 2 #include "Eeprom.h"
 3 #include "string.h"
 4 extern I2C_HandleTypeDef hi2c1;
 5 /*------д×Ö·û´®µ½EEPROMÖÐ*/
 6 void I2C_eepWritePage(uint8_t address,char * str){
 7     int len     = 0;//ÓÃÀ´¼ÆËãд½øµÄ×Ö·û´®³¤¶È
 8     int status ;    //ÓÃÀ´´æ·Åд½øÈ¥µÄ״̬
 9     int page = 0;   //ÓÃÀ´±£´æÒ³Êý
10     int k =       0;//ÓÃÀ´ÓÃ×öforÑ­»· ҳд
11     len = strlen(str)+1;//¼Ó1 °Ñ½áÊø·ûÒ²°üÀ¨½øÈ¥
12     if(len <= 7){       //Èç¹û×Ö½Ú³¤¶ÈСÓÚ8¸ö×Ö½Ú ÄÇô¾Í¿ÉÒÔÖ±½Ó´æ·ÅÎÞÐè·ÖÒ³
13         status = HAL_I2C_Mem_Write(&hi2c1,0xA0,address,I2C_MEMADD_SIZE_8BIT,str,len,200);//0xa0дÃüÁî
14         if(status == HAL_OK){
15             printf("дÈë³É¹¦£¡ \nдÈëµÄÊý¾Ý³¤¶ÈΪ:%d\nдÈëµÄÊý¾ÝÄÚÈÝΪ:%s",len,str);
16         }
17     }else{//Èç¹ûдÈëµÄ×Ö½Ú´óÓÚ8¸ö×Ö½ÚÔò·ÖÒ³±£´æ
18         page = len%8 > 0 ? (len/8+1): (len/8);//ÓÃÀ´¼ÆËãÓжàÉÙÒ³Êý¾Ý ÈýÔªÔËËã 
19         for(k = 0; k<page; k++){
20             while(HAL_I2C_IsDeviceReady(&hi2c1,0xA0,3,500));//²â溯Êý ÅжÏeepromÊÇ·ñ´¦ÔÚæµ״̬
21             status = HAL_I2C_Mem_Write(&hi2c1,0xA0,address+k*8,
22             I2C_MEMADD_SIZE_8BIT,str+8*k,(len-8*k>=8)?8:(len-8*k),200);
23             HAL_Delay(10);
24             if(status == HAL_OK){
25                 printf("±£´æµÚ:%dÒ³µÄµØÖ·:%d\n",k+1,address+8*k);//address+8*k
26             }
27             /*---->Ò»¸öÒ»¸ö×Ö½Úд*/
28             while(HAL_I2C_IsDeviceReady(&hi2c1,0xA0,3,500)){
29                 HAL_I2C_Mem_Write(&hi2c1,0xA0,address+k,I2C_MEMADD_SIZE_8BIT,str+k,1,200);
30                 HAL_Delay(10);    
31             }
32         }        
33     }
34 }
35 uint8_t* I2c_eep_Read(uint8_t address, uint8_t * data){
36     uint8_t d = 0;                    //ÓÃ×÷forÑ­»·±äÁ¿´æ·Å±äÁ¿
37     uint8_t Read_status = 0;//ÓÃÀ´´æ·Å¶ÁÈ¡µÄ״ֵ̬
38     do{
39         while(HAL_I2C_IsDeviceReady(&hi2c1,0xA1,3,5));//²â溯Êý
40         Read_status = HAL_I2C_Mem_Read(&hi2c1,0xA1,address,I2C_MEMADD_SIZE_8BIT,&data[d],1,200);
41         if(Read_status == HAL_OK){
42             d             ++;
43             address ++;
44         }else{
45             printf("¶ÁÈ¡µ½µÚ%d¸ö×Ö½Ú³öÏÖ´íÎó:%d\n",d-1,Read_status);
46         }
47         HAL_Delay(10);
48     }while(data[d-1] != '\0' && d<100);
49     return data;
50 }

复制代码

复制代码

主函数代码
void main(){
     printf("\n1-------------------eeprom  start\n"); 
     I2C_eepWritePage(0x00,"你好,我是新写入的数据!我写了很多内容今天的天气很多变\0");
        uint8_t data[100] = {0};
        HAL_Delay(100);
        printf("读取到的数据:%s",I2c_eep_Read(0x00,data));//eeprom  读取数据
}

复制代码

 

实现结果

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值