• 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("дÈë³É¹¦£¡ дÈëµÄÊý¾Ý³¤¶ÈΪ:%d дÈëµÄÊý¾ÝÄÚÈÝΪ:%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 ",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 ",d-1,Read_status); 46 } 47 HAL_Delay(10); 48 }while(data[d-1] != '' && d<100); 49 return data; 50 }

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

    实现结果

    归去来兮
  • 相关阅读:
    MySQL的去重
    java_集合框架概述
    java_泛型
    10base-t的数据发送
    bash编辑功能,在命令行里编辑快捷键
    cisco ios 密码恢复
    OSPF邻居状态
    查找修补文件差异diff、patch
    生成ISO文件
    shell 生成文件统计信息
  • 原文地址:https://www.cnblogs.com/zoute/p/9486644.html
Copyright © 2020-2023  润新知