打印
[STM32L0]

STM32 L0 的EEPROM 的读写函数

[复制链接]
4715|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GuDuDeRener|  楼主 | 2018-1-30 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define EEPROM_BASE_ADDR        0x08000000        
#define EEPROM_BYTE_SIZE        0x0800  //¶¨ÒåEEPROMµÄÆðʼλÖúʹóС
#define PEKEY1        0x89ABCDEF                //FLASH_PEKEYR
#define PEKEY2        0x02030405                //FLASH_PEKEYR ½âËøÃüÁî
#define EN_INT              __enable_irq();         //ϵͳ¿ª¾ÖÖжÏ
#define DIS_INT             __disable_irq();        //ϵͳ¹Ø±ÕÈ«¾Ö

void EEPROM_ReadBytes(unsigned int Addr,char *Buffer, short Length)//°´ÕÕ×Ö½Ú¶Á³öEEPROMµÄÊý¾Ý
{
        char *wAddr;
        wAddr=(char *)(EEPROM_BASE_ADDR+Addr);
        while(Length--)
        {
                 *Buffer++=*wAddr++;
        }        
}

void EEPROM_WriteBytes(unsigned int Addr,char *Buffer,short Length)//°´ÕÕ×Ö½ÚÊý¾Ýдµ½EEPROM
{
        char *wAddr;
        wAddr=(char *)(EEPROM_BASE_ADDR+Addr);
        DIS_INT
        FLASH->PEKEYR=PEKEY1;                    //unlock
        FLASH->PEKEYR=PEKEY2;
        while(Length--)
        {
                *wAddr++=*Buffer++;
                while(FLASH->SR&FLASH_SR_BSY);
        }
        FLASH->PECR|=FLASH_PECR_PELOCK;
        EN_INT
}
为什么写不进去啊?
沙发
fengfeng的恒| | 2018-1-31 09:14 | 只看该作者
EEPROM的基地址好像不对,你查下datasheet看看吧

使用特权

评论回复
板凳
jwzzx| | 2018-4-23 15:10 | 只看该作者
/*------------------------------------------------------------
Func: EEPROM  Read
Note:
-------------------------------------------------------------*/  
void EEPROM_Read(uint16_t Addr,uint8_t *Buffer,uint16_t Length)  
{  
    uint8_t *wAddr;  
                HAL_FLASHEx_DATAEEPROM_Unlock();
    wAddr=(uint8_t *)(DATA_EEPROM_BASE+Addr);  
    while(Length--){  
        *Buffer++=*wAddr++;  
                HAL_FLASHEx_DATAEEPROM_Lock();
    }     
}



/*------------------------------------------------------------
Func: EEPROM Write
Note:
-------------------------------------------------------------*/  
void EEPROM_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite)  
{  
    uint16_t t;  
    HAL_FLASHEx_DATAEEPROM_Unlock();      
    for(t = 0;t < NumToWrite;t++)  
    {  
        HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE,DATA_EEPROM_BASE + WriteAddr + t,*(pBuffer + t));  
    }  
    HAL_FLASHEx_DATAEEPROM_Unlock();  
}  

使用特权

评论回复
地板
gubaoyl| | 2019-1-1 20:46 | 只看该作者
jwzzx 发表于 2018-4-23 15:10
/*------------------------------------------------------------
Func: EEPROM  Read
Note:

有用,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

12

帖子

0

粉丝