TA的每日心情 | 开心 2020-7-28 15:35 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
关于STM32的IAP总结% E* }- r' ~1 B4 k) f7 {; r
最近有项目要用到1AP的功能,于是调试了下STM32的IA,可能因为个人水平的原因吧,也颇$ i. t: E2 J4 e4 R% S
费了一般周折
/ }* v7 s8 @" g4 D! y/ {现在返回头来想,其实还是蛮简单的
6 i- Z, E, Q6 B% Z `整个过程按照如下步骤:
- s/ w! `' d! G% Z$ I/ V8 I1.解锁
I7 [) m8 u( R0 I0 h2判断是否保护,有 保护的话要先关闭保护
3 G: _! F F. B' V/ x1 m1 i2 |" R3.擦除
) p! R) ^. O# E; R# H4.编程
* ~( a. `; x6 E; \- d5.复位进入应用程序区' V2 G y( l: S* L9 z# t
关于解镇:看资料的时候说的神乎其神,有个读/编程控制器叫"FPEC) x/ v3 J: A) Q. ~5 q" j- Y
有几个寄存器,专门负责Flash 的,对这几个寄存器以一-定得顺序访问并设置即可成功解锁) g) s( Q9 t$ i+ y
Flash,至于怎么访间,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻flash. _UnLock()函5 d6 j( Q' T) j1 _7 Y' j* @* k2 m
数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或% q" F9 s8 Z# p7 C. W
者顺序不对都会造成Flash 的锁定之后的所有操作都会返回一一个错误,直到下次启动后才能# L- z, o" b/ Q! i! O6 b
正常操作
g+ N) ?$ R6 ? Z; i关于保护,为了保护用户数据不被无意修改或者悲意读取,STM32提供了对芯片FLASH的( Z6 c6 q0 @# d" n9 i
写读等一-系列的保护,加密方式是按照每4页为一个单位也就是说,如果你想加密的话,你至
# l, V) Y+ Q' {" x1 k. y4 N( f少要加密4页也就至少4K的空间,至于高密的STM32是否就是8K了?这个我没仔细去看!还2 \; V8 w! U$ z3 D( w. s9 P
待以后仔细查看? :
2 Y/ `! C& N* T- w& {关于擦除,擦除也是很简单,但是只能一页一 页的擦除,ST 公司也提供了一个函 数至于这
$ X- M! `9 W/ U8 a+ K* S6 X个函数后面的输入地址参数,经过试验发现只要这个地址落在这个页里,就是擦除这个页不
) w/ ?9 ]9 [6 U, z& ?知道这样理解对不对,还需要验证???
~- j: L( ]7 H0 s& GFLASHStatus = FLASH ErasePage(Address );6 o/ Y6 w% D3 |/ h
关于编程,STM32编程-次只能以半字(16位的方式编程,库提供了两个函数
* O7 d' `* t, g' vFLASH_ Status FLASH ProgramWord(u32 Address u32 Data)编程一 个字
$ V {4 E' M; t5 L' j9 e" [. NFLASH_ Staus FLASH ProgramHatWor(u32 Address, u18 Data)编程半个字
* _) C2 @9 z0 a: [% t在实际编程虽然你调用的一-个字编程的时候内部操作仍然是按照半字的方式编程) a$ ~% O0 D- W
另外还有个最最重要的-点还要注意大小端的问题,有些你认为可移植性很好的代码.其实
: u9 Y& \! v: O并不一-定,用位移组合成- - 个32位整型然后当做参数来编程由于大小端的模式刚好第一个
/ Y# ~9 ]! s6 W1 o S$ I字节在最后边了.最后一个字节在前面了。 导致了AN2557下载我的代码可以使用,我自己的下' y1 Y7 t, s) O$ y+ a7 U
载我自己的代码竟然不能使用,很是郁闷了- -阵子.读出整个Flash的内容就很容易看出来不% Y9 g- J% O! v H; d
同了.这个没有想到也着实该死后来用指针强指,不但效率高了,程序也方便了,开一个! :/ P2 x( u: t0 s E! i
为什么有些人说STM32的IAP其实-一个 半成品.不成熟的呢????这个还需以后了解!
, f* _6 R2 D5 G5 Z
0 r# n `( D) n/ I! n+ m0 R
; L7 [$ P; {: z6 I |
|