找回密码
 立即注册
查看: 319|回复: 4

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-11-14 08:37:29

1

主题

4

回帖

61

积分

注册会员

积分
61
发表于 2024-8-22 14:06:46 | 显示全部楼层 |阅读模式
本帖最后由 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);
        
        }
}
输出结果如下,为啥数据没有保存成功呢

[14:09:39.633]接收←before write read 0x0000 Data=00
                    before write read 0x0001 Data=00
                    
[14:09:40.633]接收←begin write
                    
[14:09:41.631]接收←write over
                    after write read 0x0000 Data=00
                    after write read 0x0001 Data=00





回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2024-09-12 20:44:49

2

主题

64

回帖

358

积分

中级会员

积分
358
发表于 2024-8-22 15:37:44 | 显示全部楼层
发下 完整的程序 看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-11-14 08:37:29

1

主题

4

回帖

61

积分

注册会员

积分
61
发表于 2024-8-22 15:53:48 | 显示全部楼层
qike*** 发表于 2024-8-22 15:37
发下 完整的程序 看看

还请大佬帮忙看看

eprom测试.rar

187.84 KB, 下载次数: 65

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:342
  • 最近打卡:2025-05-09 19:46:55

23

主题

296

回帖

1180

积分

金牌会员

积分
1180
发表于 2024-8-22 16:37:26 | 显示全部楼层
你这种写和读的方法没有试过,通常是给固定的起始地址,器件内部地址会自动+1,然后用数组来存放读写的内容,你参考官方例子试下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:418
  • 最近打卡:2025-05-09 08:54:03
已绑定手机

39

主题

2016

回帖

6879

积分

论坛元老

积分
6879
发表于 2024-8-23 09:35:53 | 显示全部楼层
附件32G系列EEPROM读写例子供参考。

读写EEPROM测试程序-通过串口1输出-32G.zip

17.39 KB, 下载次数: 67

读写EEPROM测试程序-通过串口1输出-128K模式.zip

17.51 KB, 下载次数: 69

读写EEPROM测试程序-通过串口1输出-超64K.zip

17.67 KB, 下载次数: 64

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-10 01:13 , Processed in 0.128422 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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