这几天做东西用到了stm32f103的内置flash模拟eeprom,其中有个32位的数据需要存储,但是正点原子的例程并没有给出直接存取32位数据的函数,于是乎自己写了个。

首先复习概念,在stm32f103中:
8比特(bit)=1字节(Byte)
4字节(Byte)=1字(Word)

存入32位数据**(错误示范)**

void STMFLASH_WriteOneWord(u32 WriteAddr,u32 DataToWrite)
{u16 temp16[2];temp16[0]=(u16)(DataToWrite>>16);temp16[1]=(u16)DataToWrite;STMFLASH_Write(WriteAddr,temp16,2);
}

原理很简单就是把传入的32位数直接拆成高16位和低16位再由正点的函数存进去。官方给的函数FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);实际也是把32位的数存了两次16位。
接下来就是读取了,那么问题来了,正点原子给了读半字的程序:

u16 STMFLASH_ReadHalfWord(u32 faddr)
{return *(vu16*)faddr;
}

那我们读一字(1 Word = 4 Byte = 32 bit)的时候能不能直接读呢,或者像存的时候那样分开读再拼起来?
为了测试,先向地址addr=0x800F000+42中存入0xaa,再向地址addr=0x800F000+44中存入0x55,模拟了用上面的方法在addr=0x800F000+42处存入数据0x00aa0055。
首先是直接读,程序如下简单粗暴:

u32 STMFLASH_ReadWord(u32 faddr)
{return *(vu32*)faddr;
}

这个方法得到的值是‭5570730‬,也就是‭0x005500AA‬,由此可知这种方法并不可行,顺便得出了结论:stm32f103是低位优先的硬件。(相关文章链接)
在这种条件下,有两种方法解决这个问题让:
1.反着存 2.反着读。我选择1。
所以改动存的函数为:

void STMFLASH_WriteOneWord(u32 WriteAddr,u32 DataToWrite)
{u16 temp16[2];temp16[1]=(u16)(DataToWrite>>16);temp16[0]=(u16)DataToWrite;STMFLASH_Write(WriteAddr,temp16,2);
}

STM32F103 flash地址与数据存入时高低位的关系相关推荐

  1. STM32F10X SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...

  2. STM32F10X SPI操作flash MX25L64读写数据(转)

    源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...

  3. STM32利用flash读取音频数据读取与DAC播放

    目录 一.博客内容 二.Flash地址空间的读取 2.1 Flash原理 2.2 软.硬件准备 2.3 利用CubeMX建立工程 2.4 工程代码 2.5 ST-Link的使用 ​2.6 仿真调试 三 ...

  4. 基于SPI协议的Flash驱动控制-数据普通读操作

    目录 Flash数据普通读操作 实现原理 verilog设计代码 verilog测试代码 Flash数据普通读操作 实现原理 将片选信号拉低,写入读操作指令,最少读取一个字节的数据,写入读指令后要写入 ...

  5. 为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

    STM32F103ZE芯片存储空间的地址映射关系图. 在MDK编译程序设置ROM和RAM地址时候发现: IROM1为片上程序存储器,即片上集成的Flash存储器,对该处理器Flash大小为512KB, ...

  6. 搬砖:程序中的局部变量是编译时候分配地址的还是运行时分配的呢

    太无耻了吧,都没给别人分,,,, 程序中的局部变量是编译时候分配地址的还是运行时分配的呢? [问题点数:40分] https://bbs.csdn.net/topics/350012472 boref ...

  7. Hadoop大数据零基础高端实战培训系列配文本挖掘项目

    <Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点.十大目标)> 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技术:部署Hadoop集群 涉 ...

  8. 解析xml数据存入bean映射到数据库的 需求解决过程

    解析xml数据存入bean映射到数据库的 需求解决过程 2017年12月19日 15:18:57 守望dfdfdf 阅读数:419 标签: xmlbean 更多 个人分类: 工作 问题 编辑 版权声明 ...

  9. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

  10. 把爬取信息导出到mysql,关于爬虫学习的一些小小记录(四)——爬取数据存入数据库...

    关于爬虫学习的一些小小记录(四)--爬取数据存入数据库 创建数据库 pymysql 模块 具体操作 预知后事如何 前面我们已经讲了怎么访问网页,并且从网页源码中提取数据.既然数据有了,怎样管理就是下一 ...

最新文章

  1. APP和网站应该选择云主机还是服务器呢?
  2. Windows下配置sphinx+reStructuredText详解
  3. centos 安装mysql时错误unknown variable #39;defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf#39;...
  4. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
  5. 关于setTimeout和setInterval的函数参数问题
  6. 在中断程序里修改全局变量的童鞋注意啦~(C中的volatile作用 转载~)
  7. erlang rebar 配置mysql_Centos6.4安装erlang并配置mysql数据库
  8. linux gettimeofday 头文件,linux-时间编程-time、gmtime、localtime、asctime、ctime、gettimeofday、sleep、usleep...
  9. vscode远程配置
  10. 记录一下自己简单的想法
  11. 神经网络之BP算法【图文并茂】
  12. 思岚A1激光雷达hector_mapping建图与定位
  13. python爬虫的知识
  14. 10.22T2 DSU算法
  15. 时尚唯美婚礼视频制作AE标题模板 Wedding Responsive Titles
  16. IDEA创建java项目src下没有办法创建包文件/MAVEN模块名变灰且模块多道横杠
  17. android+下落+动画,完美起航-Android面试题之动画+事件处理篇
  18. 【HISI系列】海思 IPC hi3516a、hi3519v101 的单包模式和多包模式
  19. 业务团队如何在日常工作中做稳定性?涵盖事前、事中、事后的方方面面
  20. 教会你如何编写makefile文件

热门文章

  1. idea验证失败_解决iPad登陆不了Apple ID验证失败的问题
  2. (单例多例,枚举,动态代理,lombok)day23javaSE基础查漏补缺
  3. 46zTree - Metro 风格的左侧菜单
  4. 《微积分》的本质笔记
  5. ubuntu18.04装N卡驱动后无法开机或关机的解决方法
  6. 史上最拉跨的导线平差程序 2.0(by C#)
  7. 双系统安装 Ubuntu 18.04 以及删除双系统中的 Ubuntu 的方法
  8. 如何设计SEO关键字分析统计表
  9. directadmin支持多php,DirectAdmin升级PHP版本
  10. ORA-20001: Invalid or inconsistent input values