小壁虎EFM32如何写Flash实现存储

概念

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

应用场景

很多时候我们程序中的有一些变量它不是每次都需要初始化的,例如:表计中的数据,需要记录上次断电的状态标志位等等…这些都是需要记忆功能来实现的,这时候就需要把这些需要保存的变量写进去Flash里面,下次上电唤醒之后,重新读取出来。

功能实现
const unsigned char ucWriteIn[12] = {'L','i','a','n','g','J','i','n','g','Y','i','_'};

int main (void)
{ 
    CHIP_Init();
    CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO);
//   CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO);                    /* 外部高频晶振没焊接,改为使用内部晶振  */
    /* 
     *  开启LE时钟,只要使用到低频外设,都需要开启该时钟                  
     */
    CMU_ClockEnable(cmuClock_CORELE, true);    
    CMU_ClockEnable(cmuClock_GPIO, true);                                /* 使能GPIO模块的时钟源         */  
   
     /* Ensure core frequency has been updated */
    SystemCoreClockUpdate();
    
    if(SysTick_Config(SystemCoreClockGet() / 1000)) while (1);               /* 设置SysTick为1ms中断         */
      
    OrigrinatePeripherals_init();    
    
    WriteFlash();                                  //擦写Flash
    while(1);
    
    }
擦写函数:
void WriteFlash(void)
{
 //add a timer
 MSC_Init();                  //初始化MSC,并使能AUXHFRCO
 __disable_irq();             //关闭总中断
 
      if(MSC_ErasePage((uint32_t *)0x0fe00000) == mscReturnOk)       //擦除指定地址的数据
     {
         MSC_WriteWord((uint32_t *)0x0fe00000,ucWriteIn,12);               //将数据写入指定地址。
     }

 MSC_Deinit();
 
 unsigned char *Point = (unsigned char *)0x0fe00000;      //直接读取写入的地址位上的数据
    for(unsigned char i = 0; i < 8; i++)                            //读出的数据进行比对,和写入的是否一致!
    {
        if(*(Point + i) == ucWriteIn[i])
             continue;
         else
         {
            while(1);             // error occur
        }
    }
 __enable_irq();               //开启总中断
 
 printf("point = %s  \r\n",Point);
}

注意事项:
1、切记,在写Flash的过程中,不允许被任何东西打断,否则写入不成功;读数据没有这个要求。

2、写入的数据以4个字节为单位!

代码运行调试

在这里插入图片描述

总结

以上就是写Flash的过程,具体如何适合你的代码,需要你自己移植设计,很简单也很方便!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值