hkzxc1991 发表于 2024-8-22 14:06:46

请教为何无法把数据写入eeprom

本帖最后由 DebugLab 于 2024-8-22 14:53 编辑

硬件32G12K128代码如下

#include      "config.h"
#include      "STC32G_GPIO.h"
#include      "STC32G_UART.h"
#include      "STC32G_NVIC.h"
#include      "STC32G_Delay.h"
#include      "STC32G_Switch.h"
#include      "STC32G_EEPROM.h"

      void UartPutc(unsigned char dat)
      {

                SBUF = dat;
                while(TI==0);
                TI = 0;

      }

      char putchar(char c)
      {
                UartPutc(c);
                return c;
      }



/******************* IO配置函数 *******************/
void      GPIO_config(void)
{
      P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;
    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;

}
void Uart1_Init(void)      //115200bps@22.1184MHz
{
      SCON = 0x50;                //8位数据,可变波特率
      AUXR |= 0x40;                //定时器时钟1T模式
      AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
      TMOD &= 0x0F;                //设置定时器模式
      TL1 = 0xD0;                        //设置定时初始值
      TH1 = 0xFF;                        //设置定时初始值
      ET1 = 0;                        //禁止定时器中断
      TR1 = 1;                        //定时器1开始计时
}

/**********************************************/
void main(void)
{
      u8      i,Temp;
      WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
      EAXSFR();                //扩展SFR(XFR)访问使能
      CKCON = 0;      //提高访问XRAM速度
      GPIO_config();
      Uart1_Init();
      EA = 1;
      delay_ms(1000);
      printf("this is a test program\r\n");
      while (1)
      {
          for(i=0;i<2;i++)
    {
      EEPROM_read_n(i,&Temp,1);
      printf("before write read 0x%04bX Data=%02bX\r\n",i,Temp);
    }
                delay_ms(1000);
                printf("begin write \r\n");      
                for(i=0;i<2;i++)
    {
      Temp = i;
      EEPROM_write_n(i,&Temp,1);
    }
                delay_ms(1000);
                printf("write over \r\n");      
                for(i=0;i<2;i++)
    {
      EEPROM_read_n(i,&Temp,1);
      printf("after write read 0x%04bX Data=%02bX\r\n",i,Temp);
    }
                delay_ms(1000);
      
      }
}
输出结果如下,为啥数据没有保存成功呢

接收←before write read 0x0000 Data=00
                  before write read 0x0001 Data=00
                  
接收←begin write
                  
接收←write over
                  after write read 0x0000 Data=00
                  after write read 0x0001 Data=00





qike009 发表于 2024-8-22 15:37:44

发下 完整的程序 看看{:4_188:}

hkzxc1991 发表于 2024-8-22 15:53:48

qike009 发表于 2024-8-22 15:37
发下 完整的程序 看看

还请大佬帮忙看看

lezjin 发表于 2024-8-22 16:37:26

你这种写和读的方法没有试过,通常是给固定的起始地址,器件内部地址会自动+1,然后用数组来存放读写的内容,你参考官方例子试下

乘风飞扬 发表于 2024-8-23 09:35:53

附件32G系列EEPROM读写例子供参考。
页: [1]
查看完整版本: 请教为何无法把数据写入eeprom