都有说STM32的内部Flash可以像EPROM一样操作,单个字节单个字节的写入。根据本人的拙见,其实也就仅仅是“像”而已。原因有以下几点:

1.首先Flash这种东西,其写入数据的原理是便是将1变成0,所以你的某地址Flash一旦已经写过数据而且不为0,则当你再次需要向该地址写数据时,必须要先擦除,即把该地址先全部变成1,否则你将数据写入该地址后,基本上该地址里面的值已经不是你写入的值了。

2.STM32对内部Flash有页(1k或者2K)擦除指令,也就是STM32不能单独对某一个或者某几个字节进行擦除。而擦除操作并不需要大量内存。

3.如果要像EPROM一样操作Flash,其原理是先把该一页里面的数据全部读到一个buf里面,如果你希望整页的数据不丢失,那么buf的大小至少应该和页大小一样,即为1K或者2K(大小视MCU型号而定)。然后对整页进行擦除,再把要写入的数据先写到之前的buf里面(用要写入的数据替换buf里相应位置的原来的数据),再把整个buf写到Flash里面。如此便实现了任意数据长度的数据写入Flash。

4.正如第3点,如果你跑的是系统,诸如(UCOS,RTX,FRERTOS)等,那么你进行此操作的task的堆栈至少应该为1K+N或者2K+N。否则直接堆栈溢出而进hard fault。我想这是我们大家所不能忍受的。

当然,对于上述问题有一些变通的方法,如果你要写入的数据比较少,比如几十个Byte,那么你可以将buf改小,只要大于等于你要保存的数据数量就可以了,这样便可以大大减小内存。另外,STM32支持字(4Byte)或者半字(2Byte)写入,所以你的buf应该为偶数。如果你要写入的数量为奇数,buf也应该为偶数,不足的在buf里补0或任意一个数就好。因为,如果你的buf为奇数的话,在写入最后一个数据时,系统会在内存中随便抓一个地址里的数据,写进去,这可能出问题。(究竟有没问题我没有试过)。

关于STM32像EPROM一样可以单字节写内部Flash的理解相关推荐

  1. SDRAM单字节读写仿真测试

    仿真测试的所有文件 modelsim仿真 初始化时序 初始化状态机 去掉多数信号可以看到初始化时序 PRE预充电经过两个周期进入AREF自刷新,自刷新需进行两次,然后进入MREF模式设置,模式设置经过 ...

  2. 【转】OpenCV里IplImage数据结构极易出错的问题,IplImage和单字节char*的相互转换

    http://blog.csdn.net/liuyi1985/article/details/2174328 http://blog.csdn.net/liuyi1985/article/detail ...

  3. java 单字节_java文件读取。(单字节读取和按行读取读取)

    评论 # re: java文件读取.(单字节读取和按行读取读取) 2008-10-06 15:16 隔叶黄莺 再简单也比不过 groovy 的这一行代码 text = new File("f ...

  4. php+中午截取,PHP_php字符串截取中文截取2,单字节截取模式,//中文截取2,单字节截取模式 - phpStudy...

    php字符串截取中文截取2,单字节截取模式 //中文截取2,单字节截取模式 function cn_substr($str,$slen,$startdd=0){ $restr = "&quo ...

  5. STM32M CUBE实现printf打印调试信息以及实现单字节接收

    在写单片机程序时我们一般喜欢使用printf来通过串口打印调试信息,但这个函数是不能够直接使用的.必须做点对库函数的修改. 具体project下载地址: http://download.csdn.ne ...

  6. JAVA单字节读取,java资料读取。(单字节读取和按行读取读取)

    当前位置:我的异常网» 编程 » java资料读取.(单字节读取和按行读取读取) java资料读取.(单字节读取和按行读取读取) www.myexceptions.net  网友分享于:2013-12 ...

  7. bootstrap table 搜索列formatter之后,单字节搜索异常

    bootstrap table 搜索列formatter之后,单字节搜索异常 最近发现搜索这边出现这个问题,这样搜索没有效果 后面发现是因为搜索列formatter之后就会出现这个问题,那么我们就多生 ...

  8. java 读取文件第一行代码,java文件读取。(单字节读取和按行读取读取)

    评论 # re: java文件读取.(单字节读取和按行读取读取) 2008-10-06 15:16 隔叶黄莺 再简单也比不过 groovy 的这一行代码 text = new File("f ...

  9. (53)FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现)

    1.1 FPGA面试题-利用任务task实现单字节乘法功能(Verilog语言实现) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题-利用任务task实现 ...

最新文章

  1. C++两个 delete 后的问题 野指针
  2. opencv如何把一个矩阵不同列分离开_学习OPEN_CV
  3. jquery animate自定义动画
  4. Mysql慢查询定位和优化实践分享
  5. 旧手机利用(Android),当wifi,当mic,当ipcamera
  6. Spring中@DependsOn注解的作用及实现原理解析
  7. 谷歌翻译退出中国后如何恢复 Chrome 浏览器翻译的正常使用
  8. 安装惠普M1136打印机一直处于“新设备已连接”状态 解决方法
  9. 微信公众号首次关注自动回复图文信息
  10. 研发路上的总结和思考 -----来自阿里巴巴中间插件----作者:石佳宁
  11. 我看凯立德GPS软件的规划问题
  12. Linux strace、pstack 命令 使用详解
  13. 互联网晚报 | 1月6日 星期四 | 中国移动正式回归A股;京东成央视春晚独家互动合作伙伴;钉钉进军制造业...
  14. 微信小程序引入vant-weapp组件遇到的bug以及解决方法
  15. 八皇后(例题:洛谷P1219)
  16. 【软件工程大作业】快递代拿小程序项目 (第十组)
  17. 【JAVA】求出区间[a,b]中所有整数的质因数分解。
  18. DocuWare 智能文档控制——杜绝成堆的文件和文件混乱,保证业务连续性,创建企业新阶段
  19. VR外包商:最新WEARVR游戏下载
  20. dtw-python

热门文章

  1. zookeeper源码
  2. ASP.NET MVC Routing、Areas、URLs
  3. 简单的图像去噪的实现和验证码识别
  4. 国庆七天乐 Day5
  5. SQl inner LOOP | HASH | MERGE join--指定Join的方法
  6. UA MATH564 概率论I 求离散型随机变量的分布1
  7. Hibernate Tools 学习总结
  8. 如何生成动态库 .dll 的符号 .lib 文件?
  9. 牛客网多校第4场 D Another Distinct Values 【构造】
  10. 2011年中国网络游戏市场实际销售收入达到428.5亿元