需要用msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后保存数据,请高手解决!

需要用MSP430G2553的flash掉电后保存一些数据,这些数据能写入flash的息区地址D段,在不掉电的情况下,也能读取。一旦掉电后,再读就是0xff。
我的读写函数如下 通过按键将数据写入flash,上电后在main函数中先读取flash数据,但是都为0xff 读写程序参考自大神:
//FLASH段擦除void flash_erase(unsigned int *pc_word)
{

while(FCTL3 & BUSY); //如果处于忙状态,则等待 FCTL3 = FWKEY ; //清出LOCK标志,解锁
FCTL1 = FWKEY + ERASE ; //允许段擦除
*pc_word = 0; //擦除..擦除..
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK ; //加锁!!

}

//******************************************************************************//向FLASH信息区读出指定数量的字节数据
//unsigned int*pc_word :信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void read_array(unsigned char *pc_byte, unsigned char *array,unsigned char amount)
{

unsigned char i; if(amount<=127)
{
for(i=0;i< amount;i++)
{
*array = *pc_byte; //读数据,读数据时,flash地址自动加 1 ??
array++; //接收缓冲区地址加 1
pc_byte++;
}
}

}

//******************************************************************************//向FLASH信息区写入指定数量的字节数据
//unsigned char *pc_byte 信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void write_array(unsigned char *pc_byte,unsigned char *array, unsigned char amount)
{

unsigned char i;
while(FCTL3 & BUSY); //如果处于忙状态,则等待
FCTL3 = FWKEY ; //清出LOCK标志
FCTL1 = FWKEY + WRT ; //写操作,块编程,+ BLKWRT;

if(amount<=127)
{
for(i=0;i < amount;i++)
{
*pc_byte = *array;
//*pc_byte = num;
// num +=1;
array++; //发送缓冲区地址加 1
pc_byte++; //写flash时,地址人为加 1
while(!(FCTL3 & WAIT)); //如果处于忙状态,则等待 ,若用软件仿真,去掉                 //这语句
}

}
FCTL1 = FWKEY; //写操作完成,清除编程允许位 WRT,BLKWRT
while(FCTL3 & BUSY);
FCTL3 = FWKEY + LOCK; //加锁!!

}

    设置IAR , options-> FET Debugger->Download:
    在Flash erase 栏目中,有三个选项,分别是
    1. 只擦除主存储区
    2. 擦除主存储区和信息区
    3. 保留未改变的存储区。
    选择第一项

    然后只烧写写入Flash程序,单步调试,调出FLASH窗口,可以看到写入后的数据;

    如果写入数据不对,请试试在写入之前配置好FNx(分频,257K~476K)或关其它中断

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-22
Flash本来就不能掉电保存数据吧?追问

可以的,我同学实现了

需要用msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后...
设置IAR , options-> FET Debugger->Download:在Flash erase 栏目中,有三个选项,分别是1. 只擦除主存储区2. 擦除主存储区和信息区3. 保留未改变的存储区。选择第一项 然后只烧写写入Flash程序,单步调试,调出FLASH窗口,可以看到写入后的数据;如果写入数据不对,请试试在写入之前配置好FNx(分...

msp430g2553有没有eepROM
有 全名:电可擦写只读存储器。以前的单片同用rom作程序存储用,现在大多用flash。而flash烧写比较麻烦,有的时候需要断电保存一些数据的时候就要用E2PROM,可以按字节读写,时序也很简单。有的单片机不带E2PROM,则外扩如24c01之类,有的自带的,空间又够用,就省得外扩了。

msp430g2553时钟设置为什么不能取或水平
DCO频率校正选择,通常令MODx=0 注意:在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1.5MHz之间。BCSCTL1-基本时钟控制寄存器1 XT2OFF 不用管,因为MSP430G2553内部没有XT2提供的HF时钟 XTS 不用管,默认复位后的0值即可 DIVAx 设置ACLK的分频数 00 \/1 01...

单片机问题。msp430g2 和51单片机有哪些区别?求详细一点。
MSP430 系列有 OTP 型、 FLASH 型和 ROM 型三种类型的器件,这些器件的开发手段不同。对于 OTP 型和 ROM 型的器件是使用仿真器开发成功之后烧写或掩膜芯片;对于 FLASH 型则有十分方便的开发调试环境,因为器件片内有 JTAG 调试接口,还有可电擦写的 FLASH 存储器,因此采用先下载程序到 FLASH 内,再在器件内通过软...

相似回答