微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机能否将收到的数据写入FLASH

单片机能否将收到的数据写入FLASH

时间:10-02 整理:3721RD 点击:

请问各位一下,单片机能否将收到的数据写入FLASH。举个例子,假设在单片机程序内存在变量A,当前A=0,在接收到外部给发送的数据后(如数字2),将该数字保存在A中(A=2),掉电后数据不丢失,下次开机A的数据依旧是接收到的数值(即A依旧等于2)
上述功能能否实现,如果能可否给出上述功能的代码示例在这里先谢谢各位了

额。这个没试过。但是好像可以。但是要用高电压驱动。430不是可以吗。那51 应该也可以吧。不过没用过不敢讲

当然可以,不是所有单片机都有flash编程这个功能的,但绝大多数单片机都有eeprom,在进行flash编程时要注意地址,别把程序擦除了,而编程eeprom就没这个问题,就保存一个数找个带eeprom 的就行了

强大啊啊啊啊,牛人啊

值得学习下,很少对FLASH进行操作

人家小编要代码呢。


我这也没有



我都没想过这个问题

EEPROM写入确实比往flash写入方便多了,之前的自己做的那个小项目改成了往EEPROM里写入数据了,自己的开发经验还是不足啊

看大牛回复,顺便学习一下。

/*
*  Erase Sector in Flash Memory
*    Parameter:      adr:  Sector Address
*    Return Value:   0 - OK,  1 - Failed
*/



int EraseSector (unsigned long adr) {
  unsigned long n;
  n = GetSecNum(adr);                          // Get Sector Number
  IAP.cmd    = 50;                             // Prepare Sector for Erase
  IAP.par[0] = n;                              // Start Sector
  IAP.par[1] = n;                              // End Sector
  IAP_Call (&IAP.cmd, &IAP.stat);              // Call IAP Command
  if (IAP.stat) return (1);                    // Command Failed
  IAP.cmd    = 52;                             // Erase Sector
  IAP.par[0] = n;                              // Start Sector
  IAP.par[1] = n;                              // End Sector
  IAP.par[2] = CCLK;                           // CCLK in kHz
  IAP_Call (&IAP.cmd, &IAP.stat);              // Call IAP Command
  if (IAP.stat) return (1);                    // Command Failed
  return (0);                                  // Finished without Errors
}

/*
*  Program Page in Flash Memory
*    Parameter:      adr:  Page Start Address
*                    sz:   Page Size
*                    buf:  Page Data
*    Return Value:   0 - OK,  1 - Failed
*/
int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf) {
  unsigned long n;
#if SET_VALID_CODE != 0                        // Set valid User Code Signature
  if (adr == 0) {                              // Check for Vector Table
    n = *((unsigned long *)(buf + 0x00)) +
        *((unsigned long *)(buf + 0x04)) +
        *((unsigned long *)(buf + 0x08)) +
        *((unsigned long *)(buf + 0x0C)) +
        *((unsigned long *)(buf + 0x10)) +
        *((unsigned long *)(buf + 0x14)) +
        *((unsigned long *)(buf + 0x18));
    *((unsigned long *)(buf + 0x1C)) = 0 - n;  // Signature at Reserved Vector
  }
#endif
  n = GetSecNum(adr);                          // Get Sector Number
  IAP.cmd    = 50;                             // Prepare Sector for Write
  IAP.par[0] = n;                              // Start Sector
  IAP.par[1] = n;                              // End Sector
  IAP_Call (&IAP.cmd, &IAP.stat);              // Call IAP Command
  if (IAP.stat) return (1);                    // Command Failed
  IAP.cmd    = 51;                             // Copy RAM to Flash
  IAP.par[0] = adr;                            // Destination Flash Address
  IAP.par[1] = (unsigned long)buf;             // Source RAM Address
  IAP.par[2] = 1024;                           // Fixed Page Size
  IAP.par[3] = CCLK;                           // CCLK in kHz
  IAP_Call (&IAP.cmd, &IAP.stat);              // Call IAP Command
  if (IAP.stat) return (1);                    // Command Failed
  return (0);                                  // Finished without Errors
}

小白老实说。看得我好晕啊~!

为什么单片机中既有Flash又有EEPROM - 单片机实验 - 电子发烧友网  http://www.elecfans.com/lab/MCU/20161227464036.html

看不懂啊啊啊啊啊啊啊啊啊啊啊啊啊

看不懂啊啊啊啊啊啊啊啊 啊啊啊啊啊哈哈哈哈或或或

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top