TA的每日心情 | 开心 2020-7-28 15:35 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于STM32的IAP总结3 a1 h0 I7 y! w2 N
最近有项目要用到1AP的功能,于是调试了下STM32的IA,可能因为个人水平的原因吧,也颇
, o. R' c' ~& V j$ I/ ^" z费了一般周折* i/ e5 \8 M* T) E% f) K
现在返回头来想,其实还是蛮简单的9 E T6 E! W2 j1 W
整个过程按照如下步骤:
3 g6 e9 W* i1 `0 S1 ?1.解锁! ~; s& t7 S) J& [ L( d
2判断是否保护,有 保护的话要先关闭保护% G( ?7 ~! `9 M# t
3.擦除 P Q, m: }- \5 l _! D
4.编程 B2 c: J1 l4 u3 C0 l8 @# F! R
5.复位进入应用程序区
3 U6 c7 ?8 q+ }关于解镇:看资料的时候说的神乎其神,有个读/编程控制器叫"FPEC
9 r6 z9 e4 f; z1 l j有几个寄存器,专门负责Flash 的,对这几个寄存器以一-定得顺序访问并设置即可成功解锁. c2 ^% U4 B) ]: R$ M" x$ a: {
Flash,至于怎么访间,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻flash. _UnLock()函
1 x9 q9 B, ?4 q' \+ O( @4 B数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或
8 H: y; S1 ` |5 u1 j( u# f者顺序不对都会造成Flash 的锁定之后的所有操作都会返回一一个错误,直到下次启动后才能
+ B9 ]4 f9 [! q. m# X( E- J3 B正常操作9 A7 m$ f: R, {0 H0 O
关于保护,为了保护用户数据不被无意修改或者悲意读取,STM32提供了对芯片FLASH的1 G. ~; u' Z8 P4 X/ U
写读等一-系列的保护,加密方式是按照每4页为一个单位也就是说,如果你想加密的话,你至- n( ]) D; U0 u+ n+ |% h4 D- n6 E& L
少要加密4页也就至少4K的空间,至于高密的STM32是否就是8K了?这个我没仔细去看!还3 X& t# `! X0 E( X3 W' Z1 v
待以后仔细查看? :* W$ h" F. }1 Q1 i- K [$ b1 V# i
关于擦除,擦除也是很简单,但是只能一页一 页的擦除,ST 公司也提供了一个函 数至于这9 J: x2 _/ b! M( }: _# T. l
个函数后面的输入地址参数,经过试验发现只要这个地址落在这个页里,就是擦除这个页不. S5 A$ [6 c3 V5 X9 _+ |
知道这样理解对不对,还需要验证???8 Z( H) R+ P0 L5 \/ h% x
FLASHStatus = FLASH ErasePage(Address );
1 U- u$ K" w' O8 `关于编程,STM32编程-次只能以半字(16位的方式编程,库提供了两个函数
9 a& Y8 p r+ uFLASH_ Status FLASH ProgramWord(u32 Address u32 Data)编程一 个字
6 C T4 B4 j) ]7 ]: P' bFLASH_ Staus FLASH ProgramHatWor(u32 Address, u18 Data)编程半个字" M, A- m0 v( A2 w- _9 n0 v* q
在实际编程虽然你调用的一-个字编程的时候内部操作仍然是按照半字的方式编程* }6 x- |0 ]0 S- ^9 X7 \# J( M
另外还有个最最重要的-点还要注意大小端的问题,有些你认为可移植性很好的代码.其实' A" C: U. y- y9 i: B- ~
并不一-定,用位移组合成- - 个32位整型然后当做参数来编程由于大小端的模式刚好第一个0 y( n" u2 @# w
字节在最后边了.最后一个字节在前面了。 导致了AN2557下载我的代码可以使用,我自己的下
y% Y; @- F) T3 |: K+ d7 a载我自己的代码竟然不能使用,很是郁闷了- -阵子.读出整个Flash的内容就很容易看出来不+ `& R7 i6 U0 u4 J- [5 V
同了.这个没有想到也着实该死后来用指针强指,不但效率高了,程序也方便了,开一个! :
% V5 E6 j$ o I* r: G为什么有些人说STM32的IAP其实-一个 半成品.不成熟的呢????这个还需以后了解!
- F) @# `1 {: @ s, z# H6 }
8 E' s& d1 Y* k8 c) W4 V1 s2 ?, I( ^0 i
|
|