OpenEdv-开源电子网

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

浮点数写入FLASH和读出

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2016-1-17
在线时间
2 小时
发表于 2016-1-28 19:54:41 | 显示全部楼层 |阅读模式
7金钱
原子哥,我使用的是STM32F103VECT6 我想把浮点数写入FLASH,然后读出来,我发觉读出来FD=0,我这种强奸方法可行吗? 给点建议。。。。

#define  STARTADDR  0x0807F800   //主存储器第255页首地址
volatile FLASH_Status FLASHStatus=FLASH_COMPLETE;   
float FD,X2;
X2=12.9779415;

void Main(void)
{
        WriteFlashOneWord(0,(float)X2);
        ReadFlashNBtye(0,FD);
}

void ReadFlashNBtye(uint32_t ReadAddress, float ReadBuf) 读FLASH
{
        ReadAddress=(uint32_t)STARTADDR+ReadAddress;
        ReadBuf=ReadAddress;
}

void WriteFlashOneWord(uint32_t WriteAddress,float WriteData)
{
        FLASH_Unlock();
        FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);       
        FLASHStatus=FLASH_ErasePage(STARTADDR);//擦除最后一页(对于SMT32F103VECT6是第255页)

        if(FLASHStatus==FLASH_COMPLETE)
        {
                FLASHStatus=FLASH_ProgramWord(STARTADDR+WriteAddress,WriteData);   
        }
        FLASH_Lock();
}




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2016-1-28 20:45:57 | 显示全部楼层
[mw_shl_code=c,true]#include <stdio.h>

int main(void)
{
    float fData = 1.323; //四字节
    unsigned long int lnData = 0; //四字节

    printf("%ld\r\n", lnData = *((unsigned long int *)(&fData)));

    printf("%f\r\n", *((float *)(&lnData)));

    while(1);

    return 1;
}[/mw_shl_code]
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3347
金钱
3347
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-1-29 01:02:07 | 显示全部楼层
本帖最后由 likunxue 于 2016-1-29 01:04 编辑

更简单的方法是定义一个内存共享体

union{ float  fx;  char[4];} flash ;

把要写出去的浮点数 付给  flash.fx = ? ;   然后将 flash.[0~3] 的值写出去, 就行了

读取来时,按顺序写入到 flash.[0~3] 中, 读取  K =    flash.fx ; 就是你需要的浮点数了
要注意的是这种方法只能在同一个型号的CPU中使用,因为内存有大小端的问题,
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2016-1-29 08:20:50 | 显示全部楼层
直接将浮点数转换成字符串存进去,读取出来再转换成数值即可
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 07:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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