打印
[STM32L0]

STM32 L0 的EEPROM 的读写函数为什么写不进去啊?

[复制链接]
1057|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
supernan|  楼主 | 2020-10-11 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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 | 只看该作者
有用,谢谢

使用特权

评论回复
5
supernan|  楼主 | 2020-10-11 23:10 | 只看该作者

搞定了,呵呵,犯了低级错误……

使用特权

评论回复
6
有何不可0365| | 2020-10-31 23:40 | 只看该作者
ST又涨价了吗?

使用特权

评论回复
7
有何不可0365| | 2020-10-31 23:41 | 只看该作者
EEPROM的基地址不对是吗?

使用特权

评论回复
8
isageko| | 2020-11-1 22:45 | 只看该作者
所以是什么错误啊 我没看出来哪里有问题

使用特权

评论回复
9
凯复Kane| | 2020-11-1 23:00 | 只看该作者
我也不是很了解 楼主解决了跟我讲一声

使用特权

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

本版积分规则

730

主题

10412

帖子

6

粉丝