TA的每日心情 | 开心 2020-7-28 15:35 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于STM32的IAP总结
/ S* q: v; z$ z# }最近有项目要用到1AP的功能,于是调试了下STM32的IA,可能因为个人水平的原因吧,也颇
- D5 \3 y! l) ]' K# P, L费了一般周折 \. |6 W" X$ N
现在返回头来想,其实还是蛮简单的$ x9 n+ h4 q- f# V4 w( p' @
整个过程按照如下步骤:
, H. }4 |) N/ F$ B5 e. v" `1 y0 |1.解锁
, j! |( ^! ~& v! i% q9 V2判断是否保护,有 保护的话要先关闭保护. r, v, }- p5 u) l
3.擦除# m) K9 n6 ~7 M; C; x
4.编程
* ?, Z$ C2 |9 Z1 @* V5.复位进入应用程序区1 M8 X4 z) i( u
关于解镇:看资料的时候说的神乎其神,有个读/编程控制器叫"FPEC
. K& f+ N: }5 I6 G* s" B0 o! X' c有几个寄存器,专门负责Flash 的,对这几个寄存器以一-定得顺序访问并设置即可成功解锁
! d9 L7 X M. @ i' CFlash,至于怎么访间,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻flash. _UnLock()函
! z7 K' V# K3 j/ p3 m$ z数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或8 W' X& ]# P. d( D7 g7 d$ D: Y
者顺序不对都会造成Flash 的锁定之后的所有操作都会返回一一个错误,直到下次启动后才能
& T& B8 `& m8 N# v( o正常操作
; o0 C0 p3 m# C- u( s关于保护,为了保护用户数据不被无意修改或者悲意读取,STM32提供了对芯片FLASH的
7 p; Z- H3 D8 | |0 k, n% J写读等一-系列的保护,加密方式是按照每4页为一个单位也就是说,如果你想加密的话,你至
! E: a6 F9 t& m1 w- B少要加密4页也就至少4K的空间,至于高密的STM32是否就是8K了?这个我没仔细去看!还
( J7 b" j9 i/ t0 M待以后仔细查看? :
! V' Q( [, _9 y0 N8 |0 v2 B关于擦除,擦除也是很简单,但是只能一页一 页的擦除,ST 公司也提供了一个函 数至于这
- D& Q5 `# t) `0 |个函数后面的输入地址参数,经过试验发现只要这个地址落在这个页里,就是擦除这个页不1 ^2 y. a9 C6 n$ p
知道这样理解对不对,还需要验证???% `/ j% R. |( G
FLASHStatus = FLASH ErasePage(Address );
( ?3 c! ]7 j! L! G2 V- s/ y4 F关于编程,STM32编程-次只能以半字(16位的方式编程,库提供了两个函数
5 k9 ~8 \/ u4 ]* T3 r' ^FLASH_ Status FLASH ProgramWord(u32 Address u32 Data)编程一 个字; S: |9 v a) A$ \; _5 g& }
FLASH_ Staus FLASH ProgramHatWor(u32 Address, u18 Data)编程半个字
9 B- j% {* i1 l2 |在实际编程虽然你调用的一-个字编程的时候内部操作仍然是按照半字的方式编程! y7 u' f; o' H
另外还有个最最重要的-点还要注意大小端的问题,有些你认为可移植性很好的代码.其实
9 }* D' h: q1 I% v7 R并不一-定,用位移组合成- - 个32位整型然后当做参数来编程由于大小端的模式刚好第一个
. { s. y& \0 A/ R3 c' r) K! v, r字节在最后边了.最后一个字节在前面了。 导致了AN2557下载我的代码可以使用,我自己的下# T0 E" t/ g) z9 P3 _) |
载我自己的代码竟然不能使用,很是郁闷了- -阵子.读出整个Flash的内容就很容易看出来不* ` d; q- O- ?
同了.这个没有想到也着实该死后来用指针强指,不但效率高了,程序也方便了,开一个! :
% d: z2 {, A. D% Q% W7 } u+ d为什么有些人说STM32的IAP其实-一个 半成品.不成熟的呢????这个还需以后了解!2 a. v9 B" p3 {
. v0 y0 l% C2 p: [* j. {: |- l: L. N" U! W
|
|