#include "STM32Lib\\stm32f10x.h"
#include "hal.h"
#include "myapp.h"
#include <string.h>
#include <stdio.h>
#define FLASH_ADR 0x08008000 //要写入的地址
union union_temp16
{
unsigned int un_temp16;
unsigned char un_temp8[2]; // example 16: 0x0102 8:[0]2 [1]1
}my_unTemp16;
configStruct myConf =
{
"cmnet",
"\0",
"\0",
"201.2.2.2",
"9002",
{
"test123","\0","\0"
}
};
/******************************************************
flash字符串写入,每次存入两个字节
*******************************************************/
void FlashWriteStr( u32 flash_add, u16 len, u8* data )
{
//char cp[12];
//u8 s = 0;
u16 byteN = 0;
FLASH_Unlock();
FLASH_ErasePage(flash_add);
//sprintf( cp, "len:%d", len);
//USART1_Puts(cp);
while( len )
{
my_unTemp16.un_temp8[0] = *(data+byteN);
my_unTemp16.un_temp8[1] = *(data+byteN+1);
FLASH_ProgramHalfWord( flash_add+byteN , my_unTemp16.un_temp16 );
//sprintf( cp, "bye:%d\r\n", s);
//USART1_Puts(cp);
if( 1==len )
{
//如果数据长度是奇数,是1的时候跳出
break;
}
else
{
byteN += 2;
len -= 2;
}
}
FLASH_Lock();
}
/******************************************************
flash字符串读入到指定的data中,地址与写入data地址相同,读出的保存类型也必须一样
*******************************************************/
void FlashReadStr( u32 flash_add, u16 len, u8* data )
{
u16 byteN = 0;
while( len )
{
my_unTemp16.un_temp16 = *(vu16*)(flash_add+byteN);
if( 1==len )
{
*(data+byteN) = my_unTemp16.un_temp8[0];
break;
}
else
{
*(data+byteN) = my_unTemp16.un_temp8[0];
*(data+byteN+1) = my_unTemp16.un_temp8[1];
byteN += 2;
len -= 2;
}
}
}
void FlashInit(void)
{
u32 tmp=*(vu32*)(FLASH_ADR);
if(tmp==0xffffffff)
{
FlashWriteStr(FLASH_ADR, sizeof(myConf), (u8*)&myConf);
}
else
{
FlashReadStr(FLASH_ADR, sizeof(myConf), (u8*)&myConf);
}
}
int main(void)
{
//char cp[12];
ChipHalInit(); //片内硬件的初始化
FlashInit(); //flash初始化
}
上述是例程的主程序,谁能帮我解释下呢?
configStruct myConf 这个是什么意思?
u32 tmp=*(vu32*)(FLASH_ADR);
if(tmp==0xffffffff)
这两句又是什么意思呢?
还有程序从flash中读出来的数据放在哪呢?我要怎么查看呢?
希望大虾们帮忙!
在线等啊!谢谢 |