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

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

[复制链接]
一代睡神的崛起 发布时间:2018-12-27 14:37
  想必大家都知道Flash的作用吧。Flash主要是用来存储程序代码的,内核可从内部Flash中加载代码的运行。首先我们来看一下STM32F103ZET6大容量产品内部的FLASH构成吧。如图FLASH结构图所示。0 }( k" D' [2 d) v! F8 f$ ?' O

6 L/ s; F1 A9 c; F
! L0 z2 [" w% }' o, @
主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。注意,小容量和中容量产品则每页只有 1K 字节。从上图可以看出主存储器的起始地址就是 0X08000000, B0、B1 都接 GND 的时候,就是从 0X08000000开始运行代码的。
6 }6 {# o: N2 g
7 f# y  Q2 r" L% {" I8 B8 ?+ Q  p, b信息块,该部分分为 2 个小部分,其中启动程序代码,是用来存储 ST 自带的启动程序,用于串口下载代码,当 B0 接 V3.3,B1 接 GND 的时候,运行的就是这部分代码。用户选择字节,则一般用于配置写保护、读保护等功能。2 _- y( x) j$ g2 `- m# A, S4 A
7 ]. ]  A  c  t% c( n
闪存存储器接口寄存器,该部分用于控制闪存读写等,是整个闪存模块的控制机构。对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。  W9 _! N. z- P  F+ I( s! Z
8 e: B! M) o2 W2 y* m9 L8 i& a
系统存储区,系统存储区是用户不能访问的区域,它在芯片出厂时已经固化了启动代码,它负责实现串口、USB以及CAN等ISP烧录功能。
9 k8 q/ |1 |# o, y% L9 g$ Q3 G  J+ @% y  I* S: n( j! K  L( S
选项字节,选项字节用于配置FLASH的读写保护、待机/停机复位,软件/硬件看门狗等功能,这部分共16字节。可以通过修改FLASH的选项控制寄存器修改。) P, R' h/ S. c
二,对FLASH的写入过程* S4 s1 K9 c$ ?9 }7 t
在对FLASH写操作之前必须先要解锁,解锁操作也就是必须在FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2)。调用库函数void FLASH_Unlock(void);就好,同理写入完成后还要锁住FLASH调用void FLASH_Lock(void)。固件库提供了三个写FLASH的函数:
5 h1 V8 L8 i4 f. \0 @; R4 qFLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);
( W& k* s( c6 `FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);
8 }( c# F) `5 |7 I- FFLASH_Status FLASH_ProgramOptionByteData(uint32_t Address, uint8_t Data);
% _- V! A: y& E+ t1 ^: h既然有FLASH的写入函数也肯定有FLASH的擦除函数,对应的提供了三个固件库擦除函数:! u# q) u3 @6 @, l; U9 @% k
FLASH_Status FLASH_ErasePage(uint32_t Page_Address);(页擦除,指定页
/ B; y8 w, g6 tFLASH_Status FLASH_EraseAllPages(void);(擦除所有的页数据% b% i; S4 K5 D8 P9 A, c  n
FLASH_Status FLASH_EraseOptionBytes(void);(擦除用户选择字节数据+ P7 P( w1 w: m$ ?
- g$ C) p/ ?: c
最后就是读取FLASH状态了。FLASH_Status FLASH_GetStatus(void);通过返回的枚举类型值来判断当前FLASH的状态。. n1 L4 e' q( w  k' |8 ?
) ]  o6 N) F. p4 W1 s( D: g% K
好了今天就说到这,后续再见!
: |- N4 D+ d1 j9 T& C
; |, G8 @  \6 y* m

内部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 手机版