各位大神:
小弟在学习FLASH模拟EEPROM的时候,根据给的例子,做了一点改进:我想把一副图片的数据保存在FLASH里面,由于图片数据时8位的,我先把数据转化为16位的,然后每转化64个,往FLASH写一次,可是不知道为什么,程序总是不能完全执行:
改动部分如下:
u16 temp[64];
const u8 TEXT_Buffer[]={"STM32 FLASH TEST"};
#define SIZE sizeof(TEXT_Buffer) //数组长度
//#define FLASH_SAVE_ADDR 0X08070000 //设置FLASH 保存地址(必须为偶数)
#define FLASH_SAVE_ADDR 0X08000000 //设置FLASH 保存地址(必须为偶数)
void convert()
{
u16 data;
u16 i,j;
u8 time=0;
for(i=0,j=0;i<2048;)
{
data=0;
data=image[i*2];
data<<=8;
data+=image[i*2+1];
temp[j]=data;
j++;
if(j==64)
{
printf("开始写!\n");
STMFLASH_Write(FLASH_SAVE_ADDR+time*128,(u16 *)temp,64);
printf("i=%d",i);
time++;
j=0;
printf("完成一次!\n");
}
i++;
}
}
int main()
{
u16 i;
u16 temp;
delay_init();
NVIC_Configuration();
uart_init(9600);
LED_Init();
LCD_Init();
KEY_Init();
for(i=0;i<100;i++)
{
printf("进入延迟,");
delay_ms(20);
}
convert();
//read();
while(1);
}
按照我的猜想,因为要写2048个16位数据,所以总共要写32次,可是我的程序总是在写了5、6次后就不动了,调试如下:
开始写!
111,555,666
i=63完成一次!
开始写!
111,555,666
i=127完成一次!
开始写!
111,555,666
i=191完成一次!
开始写!
111,555,666
i=
到这里就死了!
请问这可能是什么原因呢?里卖弄的111 555 666 是我在 STMFLASH_Write()函数里面加的调试信息。完整的代码在附件里面,跪求大神指教啊!
|