21ic电子技术开发论坛

标题: STM32 L0 的EEPROM 的读写函数为什么写不进去啊? [打印本页]

作者: supernan    时间: 2020-10-11 22:50
标题: STM32 L0 的EEPROM 的读写函数为什么写不进去啊?
#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
}
为什么写不进去啊?
作者: zhanglli    时间: 2020-10-11 22:53
EEPROM的基地址好像不对,你查下datasheet看看吧

作者: zhuhuis    时间: 2020-10-11 22:58
/*------------------------------------------------------------
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();  
}  
作者: wenfen    时间: 2020-10-11 23:03
有用,谢谢

作者: supernan    时间: 2020-10-11 23:10

搞定了,呵呵,犯了低级错误……
作者: 有何不可0365    时间: 2020-10-31 23:40
ST又涨价了吗?
作者: 有何不可0365    时间: 2020-10-31 23:41
EEPROM的基地址不对是吗?
作者: isageko    时间: 2020-11-1 22:45
所以是什么错误啊 我没看出来哪里有问题
作者: 凯复Kane    时间: 2020-11-1 23:00
我也不是很了解 楼主解决了跟我讲一声




欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/) Powered by Discuz! X3.5