你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32读写内部Flash的库函数操作

[复制链接]
一代睡神的崛起 发布时间:2018-12-27 14:37
  想必大家都知道Flash的作用吧。Flash主要是用来存储程序代码的,内核可从内部Flash中加载代码的运行。首先我们来看一下STM32F103ZET6大容量产品内部的FLASH构成吧。如图FLASH结构图所示。
0 \3 O* u, G* T
6 k1 ]: o" X# n9 L, X5 M
* D* K5 }" b" V' P! d
主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是 0X08000000, B0、B1 都接 GND 的时候,就是从 0X08000000开始运行代码的。0 {* V( C/ _7 D' I2 q* Y2 m( c, Q

8 {* e0 p* [+ x6 ]3 n; i信息块,该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 B0 接 V3.3,B1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。
# S# ^8 y& G, L& ^% J: X) ]4 y+ x- Z9 D7 n1 V- m* y2 S0 Q. G' l
闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。9 E! u9 Q5 H' ^% s9 c# y- `

5 Z/ k' B4 v9 D5 {系统存储区,系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、USB以及CAN等ISP烧录功能。: N$ j' |8 ~; b. [4 m$ I3 G( z( A

( W" q  E1 R& c" J7 L选项字节,选项字节用于配置FLASH的读写保护、待机/停机复位,软件/硬件看门狗等功能,这部分共16字节。可以通过修改FLASH的选项控制寄存器修改。0 D5 R, t9 f; B" i" V; ^2 W4 u6 E- J
二,对FLASH的写入过程6 B0 T; y/ v3 ^4 z
在对FLASH写操作之前必须先要解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2)。调用库函数void FLASH_Unlock(void);就好,同理写入完成后还要锁住FLASH调用void FLASH_Lock(void)。固件库提供了三个写FLASH的函数:
& U5 V+ J% e. {6 X2 y" ?FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);/ }& S; p* p- W. i. c! e
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);2 }0 d" u  f2 I5 D/ a3 u5 R
FLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
- z/ w! F+ X4 H0 ~& ~既然有FLASH的写入函数也肯定有FLASH的擦除函数,对应的提供了三个固件库擦除函数:% r( O* }' h  K9 Z
FLASH_Status FLASH_ErasePage(uint32_t Page_Address);(页擦除,指定页: g, o9 o# |: y& c, ~
FLASH_Status FLASH_EraseAllPages(void);(擦除所有的页数据
/ b! H. g1 P7 B+ ]4 E' \7 cFLASH_Status FLASH_EraseOptionBytes(void);(擦除用户选择字节数据
: ]) N( \5 n, ?& o/ g; Q0 H4 [1 w+ G- [$ p6 @
最后就是读取FLASH状态了。FLASH_Status FLASH_GetStatus(void);通过返回的枚举类型值来判断当前FLASH的状态。0 }4 a" m" K: f, Y& O: I+ P
, G% G! G7 V8 I8 J
好了今天就说到这,后续再见!# s+ B- e! A' I! l
3 O+ h2 i" `7 S; ]! G

内部FLASH结构

内部FLASH结构
收藏 评论7 发布时间:2018-12-27 14:37

举报

7个回答
591745543 回答时间:2018-12-27 16:10:35
围观
sincomaster 回答时间:2018-12-27 16:13:55
谢谢分享
STM1024 回答时间:2018-12-27 20:34:19
感谢分享~~
一代睡神的崛起 回答时间:2018-12-28 10:19:41
谢谢大家围观
kimiui 回答时间:2018-12-28 10:23:45
谢谢分享
STMCU-管管 回答时间:2018-12-29 14:20:28
谢谢分享
老牛洋车 回答时间:2019-1-17 09:47:16
感谢分享,正好在练习对片内flash的读写操作,学习了。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版