[求助] MSP430F6638flash存储区的问题

落笔   2019-6-21 16:37 楼主

MSP430F6638flash主存储器可以存放除程序之外的其他数据吗?数据大小大概5KB?

回复评论 (11)

看手册是可以的,可以通过程序来对flash编程,数据大小也不成问题,不过我没这么用过。

遇到问题,要学会自己解决: http://www.ti.com/product/MSP430F6638

点赞  2019-6-21 21:52
引用: lcofjp 发表于 2019-6-21 21:52 看手册是可以的,可以通过程序来对flash编程,数据大小也不成问题,不过我没这么用过。 遇到问题,要学 ...

现在我知道flash主存储器能存放程序,但不确定他是否能存放其他数据?一般保存数据都在信息信息存储器中,但现在我们保存的数据大于信息存储器的空间?所以确认一下主存储器能存放数据吗?

点赞  2019-6-22 18:49
引用: 落笔 发表于 2019-6-22 18:49 现在我知道flash主存储器能存放程序,但不确定他是否能存放其他数据?一般保存数据都在信息信息存储器中 ...

我把你当小白,继续回复你一下(因为我在上面已经回复你了)

能否存放其他数据?可以,你那点数据完全不成问题

然后呢?得到一个可以不可以的答案就完事了?

 

我在告诉你一遍这个问题的正确解决办法,去官网看datasheet,6.9小节,已经给出了全部答案

 

点赞  2019-6-22 21:20

是啊,看手册吧。

点赞  2019-6-24 05:27
引用: lcofjp 发表于 2019-6-22 21:20 我把你当小白,继续回复你一下(因为我在上面已经回复你了) 能否存放其他数据?可以,你那点数据完全不 ...

好的 谢谢

点赞  2019-6-24 09:16
引用: alan000345 发表于 2019-6-24 05:27 是啊,看手册吧。

好的

点赞  2019-6-24 09:17
引用: lcofjp 发表于 2019-6-22 21:20 我把你当小白,继续回复你一下(因为我在上面已经回复你了) 能否存放其他数据?可以,你那点数据完全不 ...

在您的建议下我看手册了,再次厚着脸皮求助于您?我往信息存储器中写数据可以按我设定的地址中写,但是我往主存储器中写数据时,我设置的起始地址时bank3的首地址038000H,为啥调试的时候显示的写在了08000H为首地址的区中呢?

点赞  2019-6-24 13:37
引用: alan000345 发表于 2019-6-24 05:27 是啊,看手册吧。

在您的建议下我看手册了,但我又遇到新的问题,希望得到您的帮助?我往信息存储器中写数据可以按我设定的地址中写,但是我往主存储器中写数据时,我设置的起始地址时bank3的首地址038000H,为啥调试的时候显示的写在了08000H为首地址的区中呢?

点赞  2019-6-24 13:38
引用: 落笔 发表于 2019-6-24 13:37 在您的建议下我看手册了,再次厚着脸皮求助于您?我往信息存储器中写数据可以按我设定的地址中写,但是我 ...

代码呢?

点赞  2019-6-24 18:14

uchar *ADR = (uchar *)0x38000;//宏定义写入Flash的起始地址,位于bank3
//定义一个结构体
typedef struct 
{
uint year;
uint monte;
uint day;
uint hour;
uint minute;
uint tube_num;
uint lock_force;
}Flash_seg;

/*************************** 擦除FLASH ***************************/
void FlashErase(uchar *address)
{
FCTL3 = FWKEY;
while(FCTL3 & BUSY);
FCTL1 = FWKEY + ERASE;
*((uchar *)address) = 0;//将对应地址上的双字节数据擦除
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}

/*************************** 按字节写FLASH ***************************/
void FlashWrite(uchar *address,Flash_seg *word,uint count)
{
FCTL3 = FWKEY;
while(FCTL3 & BUSY);
FCTL1 = FWKEY + WRT;
uint temp = 0;
for (uint i = 0;i < count;i++)
{
memcpy(&temp,((uchar *)(word))+i,1); 
address = temp;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
while(FCTL3 & BUSY);
}

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
lcd_init();
Flash_seg p;
p.year = 2019;
p.monte = 06;
p.day = 24;
p.hour = 10;
p.minute = 25;
p.tube_num = 01;
p.lock_force = 13;
uint count = sizeof( Flash_seg);
Flash_seg *q = &p;
show_int((*q).year);
LCD_CLEAR();
FlashErase(ADR);
for(uint i = 0;i < 128;i+= 14) //存128个字节的结构体中的数据
{
FlashWrite(ADR+ i,q,count);
}
}
 

本帖最后由 落笔 于 2019-6-24 21:15 编辑
点赞  2019-6-24 20:56

问题已解决,谢谢各位的帮助

点赞  2019-6-27 16:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复