stm32 l0相关的eeprom

   内部FLASH和EEPROM这种掉电后还能保存内容的内存统称为non-volatile memory(NVM),STM32L053内部有2K的EEPROM.

 

内部EEPROM的页大小为一个Word为单位,擦除是必须以页为单位,所以库函数里的擦除函数也是每次擦除4个字节:

 

 

view plaincopy to clipboardprint?

  1. /** 
  2.   * @brief  Erase a word in data memory. 
  3.   * @param  Address: specifies the address to be erased. 
  4.   * @note   To correctly run this function, the HAL_FLASHEx_DATAEEPROM_Unlock() function 
  5.   *         must be called before. 
  6.   *         Call the HAL_FLASHEx_DATAEEPROM_Lock() to the data EEPROM access 
  7.   *         and Flash program erase control register access(recommended to protect  
  8.   *         the DATA_EEPROM against possible unwanted operation). 
  9.   * @retval HAL status 
  10.   */  
  11. HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t Address)  
  12. {  
  13.   HAL_StatusTypeDef status = HAL_OK;  
  14.     
  15.   /* Check the parameters */  
  16.   assert_param(IS_FLASH_DATA_ADDRESS(Address));  
  17.     
  18.   /* Wait for last operation to be completed */  
  19.   status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);  
  20.     
  21.   if(status == HAL_OK)  
  22.   {  
  23.     /* Clean the error context */  
  24.     ProcFlash.ErrorCode = HAL_FLASH_ERROR_NONE;  
  25.   
  26.     /* Write "00000000h" to valid address in the data memory" */  
  27.       *(__IO uint32_t *) Address = 0x00000000;  
  28.   
  29.     status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);  
  30.   }  
  31.     
  32.   return status;  
  33. }    

 写EEPROM的顺序和使用flash类似,要先解锁(UNLOCK) 才能写,写的时候可以字节、半字、字为单位都可以。

写的时候可以不擦除,内部会自动擦除。需要注意的是写EEPROM会消耗固定的时间,所以需要在程序对时间要求严格时

正确安排写EEPROM的时机。

 

写EEPROM的函数如下:

 

 

  1. void EEPROM_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite)  
  2. {  
  3.     uint16_t t;  
  4.     HAL_FLASHEx_DATAEEPROM_Unlock();      
  5.     for(t = 0;t < NumToWrite;t++)  
  6.     {  
  7.         HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE,DATA_EEPROM_BASE + WriteAddr + t,*(pBuffer + t));  
  8.     }  
  9.     HAL_FLASHEx_DATAEEPROM_Lock();  
  10. }  

 

main函数里面先写EEPROM,然后再读出来验证是否和写一样,一样的话点亮LED:

 

 

 

  1. #include "main.h"  
  2. uint8_t Test[25] = "http://www.eepw.com.cn/";  
  3. uint8_t Buff[25];  
  4. int main(void)  
  5. {  
  6.     uint8_t res;  
  7.     HAL_Init();  
  8.     SystemClock_Config();  
  9.     LED_Init();  
  10.     EEPROM_Write(0,Test,25);  
  11.     EEPROM_Read(0,Buff,25);  
  12.     res = strcmp((const char*)Buff,(const char*)Test);  
  13.     if(0 == res)  
  14.     {  
  15.         while(1)  
  16.         {     
  17.             HAL_Delay(500);  
  18.             LED_TOG;              
  19.         }  
  20.   }  
  21. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值