野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16640|回复: 0

I2C向EEPROM读写字符串,程序不成功,不知道该怎么该

[复制链接]
发表于 2020-4-2 16:47:21 | 显示全部楼层 |阅读模式
/**
  ******************************************************************************
  * @file    main.c
  * @author  fire
  * @version V1.0
  * @date    2013-xx-xx
  * @brief   I2C EEPROM(AT24C02)测试,存储小数
  ******************************************************************************
  * @attention
  *
  * 实验平台:野火 F103-霸道 STM32 开发板
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :https://fire-stm32.taobao.com
  *
  ******************************************************************************
  */
  
#include "stm32f10x.h"
#include "./usart/bsp_usart.h"
#include "./i2c/bsp_i2c_ee.h"
#include "./led/bsp_led.h"
#include <string.h>

uint8_t cal_flag = 0;
uint8_t k;
/*存储小数和整数的数组,各7个*/
long double double_buffer[7] = {0};
int int_bufffer[7] = {0};
char str[50]="你好,步小步";

#define DOUBLE_ADDR       10
#define LONGINT_ADDR      70
#define STRING_ADDR       110
/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */
int main(void)
{
  LED_GPIO_Config();
  /* 串口初始化 */
USART_Config();

printf("\r\n 这是一个EEPROM 读写小数和长整数实验 \r\n");
/* I2C 外设初(AT24C02)始化 */
I2C_EE_Init();   
   
    /*读取数据标志位*/
    I2C_EE_BufferRead(&cal_flag, 0, 1);
  
    if( cal_flag != 0xCD ) /*若标志等于0xcd,表示之前已有写入数据*/
    {      
        printf("\r\n没有检测到数据标志,FLASH没有存储数据,即将进行小数写入实验\r\n");
        cal_flag =0xCD;
        
        /*写入标志到0地址*/
        I2C_EE_BufferWrite(&cal_flag, 0, 1);
        
        /*生成要写入的数据*/
        for( k=0; k<7; k++ )
        {
           double_buffer[k] = k +0.1;
           int_bufffer[k]=k*500+1 ;
        }
        /*写入小数数据到地址10*/
        I2C_EE_BufferWrite((void*)double_buffer,DOUBLE_ADDR, sizeof(double_buffer));
        /*写入整数数据到地址60*/
        I2C_EE_BufferWrite((void*)int_bufffer, LONGINT_ADDR, sizeof(int_bufffer));
     /*写入字符数据到地址110*/
    I2C_EE_BufferWrite((void*)int_bufffer, STRING_ADDR, sizeof(str));
              
        printf("向芯片写入数据:");
        /*打印到串口*/
        for( k=0; k<7; k++ )
        {
          printf("小数tx = %LF\r\n",double_buffer[k]);
          printf("整数tx = %d\r\n",int_bufffer[k]);
        }
        
        printf("\r\n请复位开发板,以读取数据进行检验\r\n");      
  
    }   
    else
    {      
        printf("\r\n检测到数据标志\r\n");
    /*读取小数数据*/
        I2C_EE_BufferRead((void*)double_buffer, DOUBLE_ADDR, sizeof(double_buffer));
   
    /*读取整数数据*/
        I2C_EE_BufferRead((void*)int_bufffer, LONGINT_ADDR, sizeof(int_bufffer));

     I2C_EE_BufferRead((void*)str, STRING_ADDR, sizeof(str));
   
   
    printf("\r\n从芯片读到数据:\r\n");   
        for( k=0; k<7; k++ )
    {
     printf("小数 rx = %LF \r\n",double_buffer[k]);
     printf("整数 rx = %d \r\n",int_bufffer[k]);  
     
    }
        for( k=0; k<50; k++ )
    {
      
     printf("字符串= %s\r\n",str[k]);
    }
   
    }   
  
  while (1)
  {      
  }
批注 2020-04-02 164417.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 05:04 , Processed in 0.028157 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表