求问想把数据存在main flash中要如何操作?!!

2019-07-17 13:08发布

我有一堆比较大的数据想存在flash中,但是info flash太小了,想存在main flash中。
但是同样的程序在info flash中是可以正常写入的,在main flash中却不行了,单片机总是会reset。

求问想把数据存在main flash中要如何操作?!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
jiahy
1楼-- · 2019-07-18 10:35
给你一段参考代码
开发环境:IAR C。

/****************************************************************************************

*NAME:       void FLASHInit(void)
*FUNCTION:   FLASH初始化
*Parameter:  无参数
*RETURN:     无返回值
*****************************************************************************************/
void FLASHInit(void)
{
FCTL2=FWKEY+FSSEL_1+FN3+FN4;//时钟源为MCLK,25分频
}

/****************************************************************************************
*NAME:       void FLASH_Writew(unsigned int *Address,unsigned int nValue)
*FUNCTION:   将一个WORD类型的数据写入到指定的FLASH偶数起始地址
*Parameter:  Address,写入起始地址;nValue,写入值
*RETURN:     无返回值
*****************************************************************************************/
void FLASH_Writew(unsigned int *Address,unsigned int nValue)
{
FCTL1=FWKEY+WRT;             // WRT = 1
FCTL3=FWKEY;             // LOCK = 0
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
*Address=nValue;
FCTL1=FWKEY;        // WRT = 0
FCTL3=FWKEY+LOCK;   // LOCK = 1
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
}

/****************************************************************************************
*NAME:       void FLASH_Writeb(unsigned int *Address,unsigned char nValue)
*FUNCTION:   将一个BYTE类型的数据写入到指定的FLASH地址
*Parameter:  Address,写入地址;nValue,写入值
*RETURN:     无返回值
*****************************************************************************************/
void FLASH_Writeb(unsigned int *Address,unsigned char nValue)
{
FCTL1=FWKEY+WRT;             // WRT = 1
FCTL3=FWKEY;             // LOCK = 0
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
*Address=nValue;
FCTL1=FWKEY;        // WRT = 0
FCTL3=FWKEY+LOCK;   // LOCK = 1
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
}

/****************************************************************************************
*NAME:       void FLASH_Erase(unsigned int *Address)
*FUNCTION:   将FLASH里面的内容擦除掉
*Parameter:  Address,写入地址(段内任意)
*RETURN:     无返回值
*****************************************************************************************/
void FLASH_Erase(unsigned int *Address)
{
FCTL3=FWKEY;                 // LOCK = 0
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
FCTL1=FWKEY+ERASE;             //ERASE=1
*Address=0;            //向段内地址任意写,启动擦除操作
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK;
while((FCTL3&BUSY)==BUSY);    //等待FLASH存储器完成操作
}

/****************************************************************************************
*NAME:       unsigned int FLASH_Readw(unsigned int *Address)
*FUNCTION:   读指定FLASH偶数地址开始的字内容
*Parameter:  Address,读出地址
*RETURN:     返回读出值
*****************************************************************************************/
unsigned int FLASH_Readw(unsigned int *Address)
{
unsigned int Rdata;
Rdata=*Address;
return Rdata;
}

/****************************************************************************************
*NAME:       unsigned char FLASH_Readb(unsigned int *Address)
*FUNCTION:   读指定FLASH地址的字节内容
*Parameter:  Address,读出地址
*RETURN:     返回读出值
*****************************************************************************************/
unsigned char FLASH_Readb(unsigned int *Address)
{
unsigned char Rdata;
Rdata=*Address;
return Rdata;

}
jiahy
2楼-- · 2019-07-18 15:41

这个跟程序的执行顺序相关系的啦,,你把相关数据写到程序存出去了吧还是?
shimx
3楼-- · 2019-07-18 20:00
 精彩回答 2  元偷偷看……
spark周
4楼-- · 2019-07-18 23:36
信息存储区是按照sector擦除的,而程序flash是以扇区block为单位擦除的,,一擦除,你存储的信息自然就呗复位掉了。
午夜粪车
5楼-- · 2019-07-19 04:44

电路硬件问题
kkzz
6楼-- · 2019-07-19 05:26
使用的是什么处理器?

一周热门 更多>