denote

denote

0个粉丝

8

问答

0

专栏

2

资料

denote  发布于  2013-12-07 22:45:43
采纳率 0%
8个问答
4341

STM32有没有EEPROM空间?

 
以前用STC的单片机,STC提供模拟EEPRM的功能,可以把少量的设置数据存放在Flash中,以达到关机设置不丢失的功能。请问STM32有这样的功能吗?
我来回答
回答4个
时间排序
认可量排序

vacumm

0个粉丝

4

问答

0

专栏

2

资料

vacumm 2013-12-07 22:47:50
认可0
连STC都有的STM32 怎能没有
和STC一样也就是把Flash当成EEPROM使而已,虽然这样影响寿命……
库函数里就有线程的写Flash的函数
用库,这是写入例程,你可以参考一下
void Write_Flash()
{
  uint32_t  Address = 0x00;
  u8 i;
  /* Unlock the Flash Bank1 Program Erase controller */
  FLASH_UnlockBank1();
  /* Clear All pending flags */
  FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);        
  FLASHStatus = FLASH_ErasePage(BANK1_WRITE_START_ADDR);
  /* Program Flash Bank1 */
  Address = BANK1_WRITE_START_ADDR;
  for(i=0;i<32;i++)
  {
    FLASHStatus = FLASH_ProgramWord(Address, DATA);
    Address = Address + 4;
        
  }
  FLASH_LockBank1();

}

vote

0个粉丝

9

问答

0

专栏

7

资料

vote 2013-12-07 22:50:21
认可0
先去查查你用的片子上flash的容量,不通容量的flash分页大小不一样的
查好再算一下你要存放的flash地址放在下面的define后面,直接用下面的代码就可以了
#define FLASH_START_ADDRESS    ((u32)0x08080000) /* EEPROM emulation start address:
                                                  after 64KByte of used Flash memory */
这是代码,比Flash操作简单些!
//*******************************************************************************
//FLASH写入全部采用32的字写入和读出来
//*******************************************************************************
void RdFlash(unsigned char *RamAdr,unsigned int ROM,unsigned int Number){
        DATA_EEPROM_Unlock();        //解锁FLASH
        memcpy(RamAdr,(unsigned char *)ROM,Number);
        DATA_EEPROM_Lock();        //解锁FLASH
}

//***********************************************************************************
//传入的Number是字节!
void WrFlash(unsigned int *RamAdr,unsigned int ROM,unsigned int Number){
        unsigned int i;
        
        DATA_EEPROM_Unlock();        //解锁FLASH
        for(i=0;i                 if( *(unsigned int *)ROM != *RamAdr){//数据不相等,就要改写!               
                        while(DATA_EEPROM_EraseWord(ROM) !=FLASH_COMPLETE);
                        while(DATA_EEPROM_ProgramWord(ROM,*RamAdr)!=FLASH_COMPLETE);;//*RamAdr
                }
                RamAdr++;
                ROM +=4;                //数据只能加4
        }
        DATA_EEPROM_Lock();        //锁FLASH
}

cs_sos

0个粉丝

9

问答

2

专栏

5

资料

cs_sos 2013-12-08 10:14:53
认可0
可以用内部的flash 进行模拟。

用户名

0个粉丝

1

问答

0

专栏

0

资料

用户名 2013-12-08 12:14:58
认可0
现在一般的flash的擦写次数在十万次以上吧
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区