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

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

[复制链接]
一代睡神的崛起 发布时间:2018-12-27 14:37
  想必大家都知道Flash的作用吧。Flash主要是用来存储程序代码的,内核可从内部Flash中加载代码的运行。首先我们来看一下STM32F103ZET6大容量产品内部的FLASH构成吧。如图FLASH结构图所示。
+ y! Z4 x1 B( Z. k  c/ V5 P
4 H, D) B5 Y1 n; i- v

, Z5 d8 d1 }+ `. a# P主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是 0X08000000, B0、B1 都接 GND 的时候,就是从 0X08000000开始运行代码的。
4 c5 C1 W! O. [3 w/ r( H0 s& u8 T" Q# C8 e0 E( h5 K7 P! k/ b
信息块,该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 B0 接 V3.3,B1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。
) o& q9 F# W% L% ?  B$ H( W9 p4 M! e# q6 V  n& r& N
闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。* C+ g( l* f6 m9 C: F: s% ~
2 D' i$ m: ~; k3 _6 P
系统存储区,系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、USB以及CAN等ISP烧录功能。. W* B* M8 x7 |: |

# F! K0 _  t5 M选项字节,选项字节用于配置FLASH的读写保护、待机/停机复位,软件/硬件看门狗等功能,这部分共16字节。可以通过修改FLASH的选项控制寄存器修改。% H, g! k& J& ^6 r* D
二,对FLASH的写入过程5 Z( x$ L& d; C/ |4 p
在对FLASH写操作之前必须先要解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2)。调用库函数void FLASH_Unlock(void);就好,同理写入完成后还要锁住FLASH调用void FLASH_Lock(void)。固件库提供了三个写FLASH的函数:
( B6 G3 R* |3 r& z& I/ N( v. V% G" TFLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);$ F' K5 e) r  _  X& W) Y" H
FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
0 u3 F$ n7 a6 D( M& rFLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);" ]+ N1 P( r  n( t
既然有FLASH的写入函数也肯定有FLASH的擦除函数,对应的提供了三个固件库擦除函数:
7 W0 g4 i+ \1 d+ m" I) IFLASH_Status FLASH_ErasePage(uint32_t Page_Address);(页擦除,指定页)3 @$ D, p  b# \
FLASH_Status FLASH_EraseAllPages(void);(擦除所有的页数据)1 I0 Y! X- K5 N  Q8 K
FLASH_Status FLASH_EraseOptionBytes(void);(擦除用户选择字节数据)
4 R% x4 U6 A2 a: p& i0 B4 |' M8 a
' ^1 v: ^' |2 [+ L9 y9 [" A, `! \' l最后就是读取FLASH状态了。FLASH_Status FLASH_GetStatus(void);通过返回的枚举类型值来判断当前FLASH的状态。
4 `$ Q" x/ e4 z0 X
9 G4 w% A( C' A! p& T好了今天就说到这,后续再见!
8 G: G$ j( b" ?6 p3 q% ~

& ?* X' H1 w: J/ v* i

内部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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版