OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9368|回复: 9

如何向stm32f407板的flash中存入float型

[复制链接]

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
发表于 2015-3-3 14:15:19 | 显示全部楼层 |阅读模式
5金钱
看过别人写的例程,是将数组存入flash中,如果是将float型数据存入flash中,要怎么存储??

最佳答案

查看完整内容[请看2#楼]

回复【3楼】cjiamoo: --------------------------------- UINT8 *p; float f=1234.5678; p = (UINT8*)&f; flash_write(addr, p, 4); 這樣就把 float 寫入 flash
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

234

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2014-7-8
在线时间
10 小时
发表于 2015-3-3 14:15:20 | 显示全部楼层
回复【3楼】cjiamoo:
---------------------------------
UINT8 *p;
float f=1234.5678;
p = (UINT8*)&f;

flash_write(addr, p, 4);

這樣就把 float 寫入 flash
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13129
金钱
13129
注册时间
2012-11-26
在线时间
3814 小时
发表于 2015-3-3 14:46:36 | 显示全部楼层
浮点型转成16进制   读出时再把16进制转成浮点型
学无止境
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2015-3-3 15:03:33 | 显示全部楼层
回复【2楼】jermy_z:
---------------------------------
怎么转呢?有没有例子,感激不尽呀!
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2015-3-3 16:56:42 | 显示全部楼层
回复【4楼】溫柔一刀:
---------------------------------
不需要转换成数组吗?可不可以让我看看你的flash_write?谢谢!
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-3-3 17:20:35 | 显示全部楼层
直接写进出,读出来也一样,这不好吗?
用指针 ,直接写进出
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

35

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
224
金钱
224
注册时间
2014-8-15
在线时间
2 小时
 楼主| 发表于 2015-3-3 18:09:34 | 显示全部楼层
回复【6楼】muniao:
---------------------------------

我用正点原子提供的例程,里面写flash函数如下,如果直接新进去貌似不行。。原例程是写数组进去的。

void STMFLASH_Write(u32 WriteAddr,u32 *pBuffer,u32 NumToWrite)

  FLASH_Status status = FLASH_COMPLETE;
u32 addrx=0;
u32 endaddr=0;
  if(WriteAddr<STM32_FLASH_BASE||WriteAddr%4)return; //非法地址
FLASH_Unlock(); //解锁 
  FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存
 
addrx=WriteAddr; //写入的起始地址
endaddr=WriteAddr+NumToWrite*4; //写入的结束地址
if(addrx><0X1FFF0000) //只有主存储区,才需要执行擦除操作!!
{
while(addrx<endaddr) //扫清一切障碍.(对非FFFFFFFF的地方,先擦除)
{
if(STMFLASH_ReadWord(addrx)!=0XFFFFFFFF)//有非0XFFFFFFFF的地方,要擦除这个扇区
{   
status=FLASH_EraseSector(STMFLASH_GetFlashSector(addrx),VoltageRange_3);//VCC=2.7~3.6V之间!!
if(status!=FLASH_COMPLETE)break; //发生错误了
}else addrx+=4;

}
if(status==FLASH_COMPLETE)
{
while(WriteAddr><endaddr)//写数据
{
if(FLASH_ProgramWord(WriteAddr,*pBuffer)!=FLASH_COMPLETE)//写入数据

break; //写入异常
}
WriteAddr+=4;
pBuffer++;

}
  FLASH_DataCacheCmd(ENABLE); //FLASH擦除结束,开启数据缓存
FLASH_Lock();//上锁
}>
回复

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2015-3-3 18:20:29 | 显示全部楼层
回复【7楼】cjiamoo:
---------------------------------
使用指针或联合体吧,这底层函数有什么好看的
nrf51822蓝牙4.0手环开发板: 淘宝小店
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2018-1-5 16:24:28 | 显示全部楼层
溫柔一刀 发表于 2015-3-3 14:15
回复【3楼】cjiamoo:
---------------------------------
UINT8&nbsp;*p;
float&nbsp;f=1234.5678;
p&nbsp; ...

为什么我的会报错
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2018-1-5 16:25:22 | 显示全部楼层
muniao 发表于 2015-3-3 18:20
回复【7楼】cjiamoo:
---------------------------------
使用指针或联合体吧,这底层函数有什么好看的

为什么原子哥的程序可以运行,而我的却报错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 11:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表