|
STM32F302R8T6的FLASH为64K,地址从0x0800 0000~0x0800 FFFF,分成32页,每页2K字节。 w; I- ^$ V( o: t7 h/ ~ 第00页 0x0800 0000~0x0800 07FF 2KB 第01页 0x0800 0800~0x0800 0FFF 2KB 第02页 0x0800 1000~0x0800 17FF 2KB 第03页 0x0800 1800~0x0800 1FFF 2KB 第04页 0x0800 2000~0x0800 27FF 2KB 第05页 0x0800 2800~0x0800 2FFF 2KB, W2 _; K3 t# X H. l& K8 e- p. K& a 第06页 0x0800 3000~0x0800 37FF 2KB 第07页 0x0800 3800~0x0800 3FFF 2KB 第08页 0x0800 4000~0x0800 47FF 2KB 第09页 0x0800 4800~0x0800 4FFF 2KB3 P; N) `) F( W 第10页 0x0800 5000~0x0800 57FF 2KB' R6 k( k6 K1 s3 d" H, X 第11页 0x0800 5800~0x0800 5FFF 2KB2 x. t" ~! y# s8 o7 P3 W, J 第12页 0x0800 6000~0x0800 67FF 2KB 第13页 0x0800 6800~0x0800 6FFF 2KB 第14页 0x0800 7000~0x0800 77FF 2KB 第15页 0x0800 7800~0x0800 7FFF 2KB& m4 s4 d2 U+ \1 q& F/ p 第16页 0x0800 8000~0x0800 87FF 2KB; Y' L3 C& g! x( w% d: A 第17页 0x0800 8800~0x0800 8FFF 2KB9 i4 B/ V) f `/ k. F3 ^ 第18页 0x0800 9000~0x0800 97FF 2KB 第19页 0x0800 9800~0x0800 9FFF 2KB6 I, V2 ^& g* `# j! f7 j, K% O 第20页 0x0800 A000~0x0800 A7FF 2KB0 {6 a$ e/ b9 g4 P" t- V w( N 第21页 0x0800 A800~0x0800 AFFF 2KB 第22页 0x0800 B000~0x0800 B7FF 2KB 第23页 0x0800 B800~0x0800 BFFF 2KB' O/ Q' O; r! |; } 第24页 0x0800 C000~0x0800 C7FF 2KB$ t+ H; j3 g7 I) f/ N 第25页 0x0800 C800~0x0800 CFFF 2KB- E9 D$ I2 p; m3 ]/ c+ {% g 第26页 0x0800 D000~0x0800 D7FF 2KB1 l0 j4 v; D& ^4 A( t1 U. R1 } k 第27页 0x0800 D800~0x0800 DFFF 2KB1 p! `$ c0 S" v/ h" j 第28页 0x0800 E000~0x0800 E7FF 2KB8 A8 ?) u! W' C! B: w! D- B 第29页 0x0800 E800~0x0800 EFFF 2KB1 T0 ~$ {% X- q7 K; M+ ] 第30页 0x0800 F000~0x0800 F7FF 2KB 第31页 0x0800 F800~0x0800 FFFF 2KB 对FLASH块进行写操作之前必须先擦除,对应位置只能1->0改写而不能0->1改写,所以必须先擦除,擦除后所有单元值为0xFF。 / y4 ~# X2 F; j9 K7 }! x 这里只给出FLASH写操作的代码: ` _) l8 z8 A6 }7 y0 i #define IAP_ADDR 0x0800F000 //写起始地址* W- C# p' N9 p8 x' ~
进入debug,打开内存窗口,可以看到FLASH的情况。- {+ n. z& t I$ g4 K" ^
读操作很简单,这里就不描述了。 |
微信公众号
手机版
RE:【Nucleo板开发日志】+ FLASH写测试
* º¯ÊýÃû³Æ£ºFlash_Test2 O2 q0 C4 d3 i# W/ B
* º¯Êý¹¦ÄÜ£ºFLASH IAPд²âÊÔ w0 H% z) m+ _$ ?* e
* Èë¿Ú²ÎÊý£ºÎÞ7 J s% ]9 @0 i# x
* ³ö¿Ú²ÎÊý£ºÎÞ7 K& T. V- j, ~$ j q1 T& J
* ÐÞ¸Äʱ¼ä£º2014-08-31
******************************************************************************/
void Flash_Test (void)
{
uint32_t i = 0;3 ?6 y1 q* h! U E+ q
//uint8_t Read_Buff[256];
uint8_t Write_Buff[256]; //дÊý¾Ý»º³åÇø. ~* X9 [, I6 _, J7 D* Y4 T( @
uint32_t dat;; |" Q5 E& {1 s+ o5 u
FLASH_Status Status = FLASH_COMPLETE; //״̬λ
for (i = 0; i < 256; i ++) //»º³åÇø³õʼ»¯7 h2 y7 O8 {7 O& ?7 t2 i9 x
{
Write_Buff = i;5 o, u& }0 M; m, ?% U1 u% \8 n
}
& M8 D, w9 g/ B) g
FLASH_SetLatency (FLASH_Latency_1); //ÉèÖòÙ×÷µÈ´ýÖÜÆÚ
FLASH_HalfCycleAccessCmd (ENABLE); //ʹÄÜFLASH°ëÖÜÆÚ·ÃÎÊ) l( ?/ e; ?6 f2 }" L
FLASH_PrefetchBufferCmd (ENABLE); //ʹÄÜԤȡָ»º³åÇø
2 F" W0 P1 D1 o" K& D! }
FLASH_Unlock (); //½âËø
Status = FLASH_ErasePage (IAP_ADDR); //²Á³ýÒ³
for (i = 0; i < 256; i += 4)
{
//dat = Write_Buff
RE:【Nucleo板开发日志】+ FLASH写测试
RE:【Nucleo板开发日志】+ FLASH写测试
* 函数名称:Flash_Test
* 函数功能:FLASH IAP写测试
* 入口参数:无6 V) n( V! k' t/ a) u4 X5 Z2 a
* 出口参数:无
* 修改时间:2014-08-31
******************************************************************************/8 G4 s5 j: g4 B" u7 E
void Flash_Test (void)" w+ i/ k; @- [) H [( c
{; [# |2 E5 s5 t. y
uint32_t i = 0;
//uint8_t Read_Buff[256];
uint8_t Write_Buff[256]; //写数据缓冲区4 l+ c4 e( r5 z" q
uint32_t dat;. |; i6 p# Y1 h M
FLASH_Status Status = FLASH_COMPLETE; //状态位
for (i = 0; i < 256; i ++) //缓冲区初始化% v& D, N( [! @: x
{; G8 u* J9 v& e( z& W$ [
Write_Buff = i;/ S2 W; _- e! \- Z0 M
}+ @4 G( }8 D1 `8 u& g
2 Z3 W) T) q+ D; s. f) y
FLASH_SetLatency (FLASH_Latency_1); //设置操作等待周期; d9 k9 p0 U9 u' h8 F6 f
FLASH_HalfCycleAccessCmd (ENABLE); //使能FLASH半周期访问
FLASH_PrefetchBufferCmd (ENABLE); //使能预取指缓冲区# i% H) Q& }0 y, `- d5 x" X
FLASH_Unlock (); //解锁
Status = FLASH_ErasePage (IAP_ADDR); //擦除页
for (i = 0; i < 256; i += 4)1 q Z3 o! u: ]* A
{
//dat = Write_Buff
RE:【Nucleo板开发日志】+ FLASH写测试