MSP430F6638flash主存储器可以存放除程序之外的其他数据吗?数据大小大概5KB?
看手册是可以的,可以通过程序来对flash编程,数据大小也不成问题,不过我没这么用过。
遇到问题,要学会自己解决: http://www.ti.com/product/MSP430F6638
引用: lcofjp 发表于 2019-6-21 21:52 看手册是可以的,可以通过程序来对flash编程,数据大小也不成问题,不过我没这么用过。 遇到问题,要学 ...
现在我知道flash主存储器能存放程序,但不确定他是否能存放其他数据?一般保存数据都在信息信息存储器中,但现在我们保存的数据大于信息存储器的空间?所以确认一下主存储器能存放数据吗?
引用: 落笔 发表于 2019-6-22 18:49 现在我知道flash主存储器能存放程序,但不确定他是否能存放其他数据?一般保存数据都在信息信息存储器中 ...
我把你当小白,继续回复你一下(因为我在上面已经回复你了)
能否存放其他数据?可以,你那点数据完全不成问题
然后呢?得到一个可以不可以的答案就完事了?
我在告诉你一遍这个问题的正确解决办法,去官网看datasheet,6.9小节,已经给出了全部答案
是啊,看手册吧。
引用: lcofjp 发表于 2019-6-22 21:20 我把你当小白,继续回复你一下(因为我在上面已经回复你了) 能否存放其他数据?可以,你那点数据完全不 ...
好的 谢谢
引用: alan000345 发表于 2019-6-24 05:27 是啊,看手册吧。
好的
引用: lcofjp 发表于 2019-6-22 21:20 我把你当小白,继续回复你一下(因为我在上面已经回复你了) 能否存放其他数据?可以,你那点数据完全不 ...
在您的建议下我看手册了,再次厚着脸皮求助于您?我往信息存储器中写数据可以按我设定的地址中写,但是我往主存储器中写数据时,我设置的起始地址时bank3的首地址038000H,为啥调试的时候显示的写在了08000H为首地址的区中呢?
引用: alan000345 发表于 2019-6-24 05:27 是啊,看手册吧。
在您的建议下我看手册了,但我又遇到新的问题,希望得到您的帮助?我往信息存储器中写数据可以按我设定的地址中写,但是我往主存储器中写数据时,我设置的起始地址时bank3的首地址038000H,为啥调试的时候显示的写在了08000H为首地址的区中呢?
引用: 落笔 发表于 2019-6-24 13:37 在您的建议下我看手册了,再次厚着脸皮求助于您?我往信息存储器中写数据可以按我设定的地址中写,但是我 ...
代码呢?
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);
}
}