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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值