STM32把不同类型数据写入flash的两种方法

由于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(联合体)方法,简便,不易写错。

你可能感兴趣的:(STM32)