stm32 flash读写例程(stm32掉电写内部flash)

这里我就STM32L053芯片的FLASH编程做一个简单的演示,并做一些提醒,供有需要的人参考。一般来说,FLASH编程主要包括擦除、代码编程、选项字修改操作,下面不再介绍选项编程。STM32L0芯片的擦除不仅支持整页擦除,还支持分页擦除。每页的大小是128字节,也就是32个字。你可以按字或半页[64字节]编程。单页擦除、单字编程、半页编程的时间是一样的,都是3.2ms左右,芯片的数据表里也写的很清楚。
这里有两个提醒。第一,在擦除或编程时,要注意地址对齐。对于页面擦除,地址对齐应为128字节,字编程应为4字节,半页编程应为64字节。还有一点就是在做半页编程的时候,半页编程的执行代码要放在RAM里,这也是手册里强调的。下面演示字编程、页编程和页擦除的操作。这里我先在字编程模式下写五个字,然后在半页编程模式下FLASH编程五页半,记录他们所花的时间,看看字编程时间和半页编程时间是否一致。另外,五页半编程后,进行页面擦除操作,擦除刚编程的五页半中的一页,也就是最后应该只剩下三页半[注:对于STM32L0系列芯片,擦除后内部FLASH的内容都是0]。下面的代码截图是基于STM32Cube库整理的,主要涉及三个操作:字编程、半页编程、页擦除,对应的是三个带绿色下划线的库函数。
其中半页编程的执行代码需要配置在RAM中才能运行。此外,Period1和Period2分别用于存储写五个字和五页半的编程时间,并放在指定的FLASH位置。编译后,我们可以看到以下结果:
上面的截图是运行后芯片内部一些FLASH空间的内容。五个红框围起来的数据是五个字编程的结果,蓝框的数据是五个半页编程的结果,但最后只能看到三页半的编程内容,因为最后两页半的内容在页面擦除后消失了。用于计算编程时间的定时器的计数频率为1MHz。显然,周期1和周期2基本相等。将它们除以5后,编程时间为3.3 ms,显然在批量代码编程中使用半页编程效率更高。如前所述,半页编程完成后,其执行代码需要放入RAM才能运行。这个代码在STM32cube库的这个文件STM 32 lxx _ Hal _ flash _ ram func . c里。对于不同的ide,该操作的实现略有不同。在这里,ARM MDK用于简单的配置,RAM是为它而划分的。
STM32L0系列FLASH编程的演示就介绍到这里,希望可以帮助有需要的人节省一些时间和精力。

其他教程

微课录屏(微课录制声音怎么好听)

2022-9-8 8:06:04

其他教程

能够熟练使用办公软件(熟练的掌握了各种办公软件)

2022-9-8 8:08:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索