TA的每日心情 | 开心 2020-7-28 15:35 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于STM32的IAP总结. o% }8 Z% x j$ K& }
最近有项目要用到1AP的功能,于是调试了下STM32的IA,可能因为个人水平的原因吧,也颇
$ b# D( C6 b# D8 t5 d6 g, I4 P5 x费了一般周折
L: t h' q) F: U( O现在返回头来想,其实还是蛮简单的
, E o8 Y. n* H- s# B; D整个过程按照如下步骤:
. J; c* e! D5 d9 M4 K; j1.解锁
1 m/ p% X: E+ A$ o) R2判断是否保护,有 保护的话要先关闭保护9 x; b4 `& y% S9 ]- d) B
3.擦除
, x' l8 u, |8 w3 V4.编程( p2 b5 c5 c8 e
5.复位进入应用程序区8 o$ r0 x; w; ?
关于解镇:看资料的时候说的神乎其神,有个读/编程控制器叫"FPEC
( ~) \. g7 }7 R9 O% F有几个寄存器,专门负责Flash 的,对这几个寄存器以一-定得顺序访问并设置即可成功解锁
6 G" ?1 s& |* |4 M RFlash,至于怎么访间,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻flash. _UnLock()函
2 S4 ]6 y2 Z- D: A& \数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或
8 X' T: n( h$ W者顺序不对都会造成Flash 的锁定之后的所有操作都会返回一一个错误,直到下次启动后才能. x. J* Z9 k1 K8 j8 h
正常操作- P9 e" x8 P. e! t# W/ o
关于保护,为了保护用户数据不被无意修改或者悲意读取,STM32提供了对芯片FLASH的$ U4 B. ^5 h$ f% P3 o& S. A8 N
写读等一-系列的保护,加密方式是按照每4页为一个单位也就是说,如果你想加密的话,你至3 u: ~! W% M' g
少要加密4页也就至少4K的空间,至于高密的STM32是否就是8K了?这个我没仔细去看!还
% z `- D9 Q8 l! d! [7 `待以后仔细查看? :8 ~. g( [1 a; u! V
关于擦除,擦除也是很简单,但是只能一页一 页的擦除,ST 公司也提供了一个函 数至于这
# Q( b) c( u" D- a1 m: |) j) h个函数后面的输入地址参数,经过试验发现只要这个地址落在这个页里,就是擦除这个页不
+ P$ `* {8 c% X+ F0 ~4 S知道这样理解对不对,还需要验证???( y) N0 R+ p* \% b
FLASHStatus = FLASH ErasePage(Address );
- Z/ {, ?" j0 H( K: F关于编程,STM32编程-次只能以半字(16位的方式编程,库提供了两个函数; I) }0 M6 x, j+ D; ]5 u5 s
FLASH_ Status FLASH ProgramWord(u32 Address u32 Data)编程一 个字
6 D9 w9 s6 ~) }7 xFLASH_ Staus FLASH ProgramHatWor(u32 Address, u18 Data)编程半个字
4 w( M) G, \* I$ _在实际编程虽然你调用的一-个字编程的时候内部操作仍然是按照半字的方式编程7 ^; m5 Z, R* E2 |! Y. e% t/ o
另外还有个最最重要的-点还要注意大小端的问题,有些你认为可移植性很好的代码.其实
' R0 o% m9 B. x9 E. C并不一-定,用位移组合成- - 个32位整型然后当做参数来编程由于大小端的模式刚好第一个3 q) ^6 g- a7 p: q6 X# H
字节在最后边了.最后一个字节在前面了。 导致了AN2557下载我的代码可以使用,我自己的下( u+ f2 t9 Z% T' N K
载我自己的代码竟然不能使用,很是郁闷了- -阵子.读出整个Flash的内容就很容易看出来不1 Q2 K: l4 _1 v$ o) s3 l+ K( d! L, j
同了.这个没有想到也着实该死后来用指针强指,不但效率高了,程序也方便了,开一个! :) X0 p' ^" s. l; c7 i/ y
为什么有些人说STM32的IAP其实-一个 半成品.不成熟的呢????这个还需以后了解!/ o0 T8 Q+ g) ?. V6 m. _9 y0 r$ L
% d: b# V, x: B( L
" C4 a$ s; F- C/ C7 { h/ f/ [7 u/ F6 R% b |
|