由于stm32f1写入的时候只能写入16位的数据,以下列举两种方法写入flash不同数据。
1.利用指针
写操作
typedef uint16_t u16;
typedef int16_t s16;
typedef uint32_t u32;
float a=3.14159;
u32 b;
u16 SaveBuff[2];
b=*(u32 *)&a;//这句话意思是取对a取地址,然后把这个地址强转成u32 *类型,再去取这个地址的u32数据
/*取高16位和低16位*/
SaveBuff[0]=(u16)(b&0x0000ffff);
SaveBuff[1]=(u16)(b>>16);
/*连续写入*/
STMFLASH_Write(FLASH_SAVE_ADDR,SaveBuff,sizeof(SaveBuff));
读操作
typedef uint16_t u16;
typedef int16_t s16;
typedef uint32_t u32;
float a;
u32 b;
/*读出float数据*/
a=*(float *)faddr;
/*读出u32数据*/
b=*(u32 *)faddr;
2.利用union
写操作
typedef uint16_t u16;
typedef int16_t s16;
typedef uint32_t u32;
/*定义union类型*/
typedef union {
u32 uint32val;
float floatval;
}NUION32;
/*定义union变量*/
UNION32 union32;
float a=3.14159;
u16 SaveBuff[2];
union32.floatval=a;
SaveBuff[0]=(u16)(union32.uint32val&0x0000ffff);
SaveBuff[1]=(u16)(union32.uint32val>>16);
STMFLASH_Write(FLASH_SAVE_ADDR,SaveBuff,sizeof(SaveBuff));
读操作
typedef uint16_t u16;
typedef int16_t s16;
typedef uint32_t u32;
float a;
u32 b;
/*读出float数据*/
a=*(float *)faddr;
/*读出u32数据*/
b=*(u32 *)faddr;
个人更倾向于union(联合体)方法,简便,不易写错。