OpenEdv-开源电子网

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

关于STM32F407的SPI操作FLASH,W25QXX_Write()函数的问题

[复制链接]

16

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2019-3-11
在线时间
50 小时
发表于 2019-3-21 09:06:02 | 显示全部楼层 |阅读模式
10金钱
函数原型://写SPI FLASH  //在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)                                               
//NumByteToWrite:要写入的字节数(最大65535)   
u8 W25QXX_BUFFER[4096];                 
void W25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)  

想问问大佬们,W25QXX_Write函数的地址和写入的字节数是什么关系?
我想往flash写两个浮点数,我以为一个地址对应一个字节,于是这样写
                //W25QXX_Write((u8*)text_ch,0,4);   
                //W25QXX_Write((u8*)text_ch,4,4);

发现读出来的数字是不完整的,数据有丢失。。。


最佳答案

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

用指针,直接区浮点数地址,然后存储4个字节(float)或者8字节(double)。 读取的时候再强制转换回来即可
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-3-21 09:06:03 | 显示全部楼层
用指针,直接区浮点数地址,然后存储4个字节(float)或者8字节(double)。
读取的时候再强制转换回来即可
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-21 09:32:46 | 显示全部楼层
浮点数强制转换后肯定丢数据了~
回复

使用道具 举报

16

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
327
金钱
327
注册时间
2019-3-11
在线时间
50 小时
 楼主| 发表于 2019-3-21 11:55:05 | 显示全部楼层
peng1554 发表于 2019-3-21 09:32
浮点数强制转换后肯定丢数据了~

应该不是这个问题,我后来用了
//W25QXX_Write((u8*)text_ch,0,16);   
//W25QXX_Write((u8*)text_ch,16,16);
写数据。
发现读出来的数据正常,现在比较懵的是W25QXX_Write函数的地址和写入的字节数到底是什么关系?
回复

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10572
金钱
10572
注册时间
2017-2-18
在线时间
1914 小时
发表于 2019-3-21 12:58:37 | 显示全部楼层
天涯海QxkJX 发表于 2019-3-21 11:55
应该不是这个问题,我后来用了
//W25QXX_Write((u8*)text_ch,0,16);   
//W25QXX_Write((u8*)text_ch, ...

写入的字节数+写入数据的地址不能超过SPI FLASH地址范围
回复

使用道具 举报

35

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2016-10-12
在线时间
53 小时
发表于 2019-3-21 13:07:17 | 显示全部楼层
flash只能在一个页面里写,一般最多是256字节,所以你这个得考虑这个问题。
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2019-3-21 13:27:05 | 显示全部楼层
浮点数在内存里的存储不是那么简单的,建议你小数点后需要保留N位,就放大10^N倍,变成整型后存储。
态度决定一切
回复

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2020-1-16
在线时间
14 小时
发表于 2020-5-8 09:11:10 | 显示全部楼层
不太会,有没有代码
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 12:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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