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

【Nucleo板开发日志】+ FLASH写测试

[复制链接]
wudianjun2001 发布时间:2014-8-31 13:42
STM32F302R8T6的FLASH为64K,地址从0x0800 0000~0x0800 FFFF,分成32页,每页2K字节。
7 h$ d( l* ^0 \* y8 r; c' m第00页    0x0800 0000~0x0800 07FF         2KB. N5 ~5 D0 Q- n8 J+ {% m
第01页    0x0800 0800~0x0800 0FFF         2KB2 r4 K( a" [6 x+ H' ~6 q( G
第02页    0x0800 1000~0x0800 17FF         2KB: C  M! O8 v& V
第03页    0x0800 1800~0x0800 1FFF         2KB( `+ O4 Y* v- q8 ^: x! t3 v2 u9 V- F3 |, U1 M
第04页    0x0800 2000~0x0800 27FF         2KB* Y1 c, g) K& z
第05页    0x0800 2800~0x0800 2FFF         2KB5 H# I- U. u5 S! H
第06页    0x0800 3000~0x0800 37FF         2KB
9 ]) t. Y: f7 s- Q$ x3 l- ^第07页    0x0800 3800~0x0800 3FFF         2KB
: n% \8 ^/ }- @, d  {" }第08页    0x0800 4000~0x0800 47FF         2KB
- R& u( Y; p8 A/ j' @. p第09页    0x0800 4800~0x0800 4FFF         2KB
9 M6 {  k& x$ G/ V第10页    0x0800 5000~0x0800 57FF         2KB
# p: C+ O1 ]: y4 l第11页    0x0800 5800~0x0800 5FFF         2KB* h- ~" ?/ O# `" G
第12页    0x0800 6000~0x0800 67FF         2KB
; j2 D6 X7 \& [- f+ s/ k( L$ j; y" \. k第13页    0x0800 6800~0x0800 6FFF         2KB
7 R) B+ j. H9 c, ^! u第14页    0x0800 7000~0x0800 77FF         2KB
% p- E) |  t9 Y8 ]2 i/ x1 g第15页    0x0800 7800~0x0800 7FFF         2KB
( v# @* U2 V3 [! x- ~0 }第16页    0x0800 8000~0x0800 87FF         2KB
- Z9 X& e0 s7 k' v+ u" {) b  Z  s第17页    0x0800 8800~0x0800 8FFF         2KB" {9 o! k3 k# p5 [9 a. ^% E
第18页    0x0800 9000~0x0800 97FF         2KB
& S2 p) j/ i! ^+ \& q9 ~第19页    0x0800 9800~0x0800 9FFF         2KB
7 M( N  i* ?( b第20页    0x0800 A000~0x0800 A7FF         2KB
6 u: l5 m" g( k9 R# |+ s" j6 y第21页    0x0800 A800~0x0800 AFFF         2KB4 o3 h1 A; i- C6 N6 H2 S/ u
第22页    0x0800 B000~0x0800 B7FF         2KB
0 |3 Y* e- \' j- u  r5 H第23页    0x0800 B800~0x0800 BFFF         2KB, w3 z7 u1 _1 [. p
第24页    0x0800 C000~0x0800 C7FF         2KB+ C5 B& Z0 l* P+ M2 Y5 D6 c
第25页    0x0800 C800~0x0800 CFFF         2KB
/ P$ z, N! Z/ h, P第26页    0x0800 D000~0x0800 D7FF         2KB' g$ M5 F9 V2 J: C7 b
第27页    0x0800 D800~0x0800 DFFF         2KB
! b( ?# t7 {. T; d第28页    0x0800 E000~0x0800 E7FF         2KB" b: I: \8 C/ C. F9 z! p
第29页    0x0800 E800~0x0800 EFFF         2KB" i; ]0 H) J$ ^
第30页    0x0800 F000~0x0800 F7FF         2KB
  o  {1 W# T* v3 i  v! s& @  T  w第31页    0x0800 F800~0x0800 FFFF         2KB
' d. n  R% b; k8 C5 E    对FLASH块进行写操作之前必须先擦除,对应位置只能1->0改写而不能0->1改写,所以必须先擦除,擦除后所有单元值为0xFF。5 X! |, Z7 n4 |: e% H
 7 |! o1 t3 u0 }  U
这里只给出FLASH写操作的代码1 N$ X$ r+ [- C; M
#define IAP_ADDR  0x0800F000              //写起始地址" z: i; c7 Y7 y+ [: {& o' [
1.jpg
7 p( W' P3 g$ P) N进入debug,打开内存窗口,可以看到FLASH的情况。0 y# q. w' ~: Y7 V
2.jpg
; t, S# ^9 q- D- B5 U$ Q读操作很简单,这里就不描述了。
收藏 评论4 发布时间:2014-8-31 13:42

举报

4个回答
wudianjun2001 回答时间:2014-8-31 13:43:57

RE:【Nucleo板开发日志】+ FLASH写测试

/******************************************************************************8 O- K! V; v! ?! X7 a" ^7 n
* º¯ÊýÃû³Æ£ºFlash_Test
+ U* C8 R; J$ f3 t# U8 h- h* º¯Êý¹¦ÄÜ£ºFLASH IAPд²âÊÔ
! P" L3 f& _7 N9 t# T  |. m& c* Èë¿Ú²ÎÊý£ºÎÞ# p3 ~3 I" g8 c, g/ ]+ L
* ³ö¿Ú²ÎÊý£ºÎÞ
3 v2 T/ Z, f! P4 K7 R1 I* ÐÞ¸Äʱ¼ä£º2014-08-318 c& o% m3 S' h4 e9 M5 U. |, q  e
******************************************************************************/
* E! j0 r, ?- v7 K6 {void Flash_Test (void)8 ]3 @) i" E: ^  B/ h; x
{
5 z1 D* k+ k# r    uint32_t i = 0;
! W" ~9 |, `7 E$ p- l) b    //uint8_t Read_Buff[256];' i9 M/ k1 @2 [6 q/ _
    uint8_t Write_Buff[256];                                //дÊý¾Ý»º³åÇø
1 X: O% }* [) r3 j    uint32_t dat;
, N& W! q0 ~, ?6 u& a5 p! r* v    FLASH_Status Status = FLASH_COMPLETE;                   //״̬λ& U  o% f" I; |
    for (i = 0; i < 256; i ++)                              //»º³åÇø³õʼ»¯
3 y" S9 T; Y# M- |% J, I+ |    {
7 f/ j& w- E; G/ |" }        Write_Buff = i;( }* y; j$ H, n( o) D
    }
! f1 d- K2 r- E' o6 p6 z   
; Y5 Y! o1 k# ?    FLASH_SetLatency (FLASH_Latency_1);                     //ÉèÖòÙ×÷µÈ´ýÖÜÆÚ# C- d& H7 h* s3 v/ L8 p
    FLASH_HalfCycleAccessCmd (ENABLE);                      //ʹÄÜFLASH°ëÖÜÆÚ·ÃÎÊ
- S1 n+ f7 C- o8 R7 i/ o& |" j5 [, {    FLASH_PrefetchBufferCmd (ENABLE);                       //ʹÄÜԤȡָ»º³åÇø8 j8 \$ P  `  y4 H$ i# Y
    $ n4 k0 a2 a4 J9 R
    FLASH_Unlock ();                                        //½âËø
' k) f/ H# h( e% y$ G    Status = FLASH_ErasePage (IAP_ADDR);                    //²Á³ýÒ³
2 `; v+ k" b/ U  ]1 k% }# G; u    for (i = 0; i < 256; i += 4)
$ C7 z9 I6 l- z# p9 `3 L: ~    {
0 ^; M5 `, f3 f, |1 K7 a9 D        //dat = Write_Buff
wudianjun2001 回答时间:2014-8-31 13:44:47

RE:【Nucleo板开发日志】+ FLASH写测试

字体不太对,从编辑器里拷出来汉字就成乱码了
wudianjun2001 回答时间:2014-8-31 13:45:14

RE:【Nucleo板开发日志】+ FLASH写测试

/******************************************************************************
; l& T. v3 J; ~. H6 }& w( X* 函数名称:Flash_Test% e' g' @! X* Q! i( ?$ p
* 函数功能:FLASH IAP写测试
9 f! R6 o- y% Z5 {) i+ m# J0 M* 入口参数:无* [" Y( T- y! x' o* {) D  N! f. e
* 出口参数:无$ V! E1 v! ]! o. Q8 Y3 ^- U
* 修改时间:2014-08-31' \/ c& ]. U6 C& F
******************************************************************************/
3 V  h1 ~4 F2 xvoid Flash_Test (void)
' d3 Q% ]) s. `! Q{
( f7 L2 s; ]* I8 B' X    uint32_t i = 0;3 s, U8 n! `9 s' c
    //uint8_t Read_Buff[256];
( M  N+ F- S8 o  Q# W6 u+ ^1 ]    uint8_t Write_Buff[256];                                //写数据缓冲区
$ X* N$ v5 x6 u    uint32_t dat;
. c% L2 f% \% p- z; X0 s; R    FLASH_Status Status = FLASH_COMPLETE;                   //状态位8 b) s- a) w; v- T9 b0 M+ Z
    for (i = 0; i < 256; i ++)                              //缓冲区初始化
3 O% M8 ~/ H3 s, D+ k& y    {
3 y% S7 P6 ^4 p0 e/ T" |6 K4 I% m4 r* `        Write_Buff = i;
/ l8 H+ t1 S5 s  e5 ^: K( W; u    }
/ Y" d. q7 U- G" D' S, K   
3 U! T! x# D$ s# I) }, T% S7 O    FLASH_SetLatency (FLASH_Latency_1);                     //设置操作等待周期9 g' ^9 O, U3 L) g6 G
    FLASH_HalfCycleAccessCmd (ENABLE);                      //使能FLASH半周期访问4 C0 J, v" @) E, O% C
    FLASH_PrefetchBufferCmd (ENABLE);                       //使能预取指缓冲区
, x0 T3 w% J4 {$ `" I   
1 Q4 s8 ^2 ^1 Q& a+ T8 _) ]$ z    FLASH_Unlock ();                                        //解锁
9 O6 K$ x) c+ ]- s    Status = FLASH_ErasePage (IAP_ADDR);                    //擦除页! X/ M5 y4 p. \8 @1 ]  Q
    for (i = 0; i < 256; i += 4)8 j& Y$ \' ^$ ?& c! c
    {
; ~4 @8 |1 [# U, B* d4 D' h; x        //dat = Write_Buff
霹雳之火 回答时间:2014-8-31 14:25:28

RE:【Nucleo板开发日志】+ FLASH写测试

第一篇分析flash读写,好贴,

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版