你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:11
Exemple 12 A% y9 ^6 s1 G. l6 z1 B

$ b9 Y- P4 J' a, R本例展示了如何对STM32的FLASH写入数据。; @1 U9 L/ o; l) d$ S3 x
+ D# Y9 d8 S8 ^  }( R9 r
在RESET以后,FLASH存储器的写/擦控制器(Flash memory Program/Erase Controller)是被锁住的,为了能够写入数据,首先要求对控制器解锁(FLASH_Unlock())。
, a, \; |* [9 e
9 Y- L* A( S1 g9 Q在写入数据前,程序首先擦除所有要编辑的页面。擦除程序首先计算需要的页面数目,然后通过不断调用FLASH_ErasePage函数进行逐页擦除。之后,程序不断调用FLASH_ProgramWord函数对FLASH写入数据。待整个过程完成以后,检查FLASH中的数据是否已被正确写入,检查结果放在变量MemoryProgramStatus中。6 @5 N0 r! o1 A( R) d8 B
0 b+ W0 Z, b' s. b: c
Exemple 1! d0 K; k8 g3 w5 u  \

6 a4 r; t0 o7 J% e本例展示了如何开启/关闭STM32 FLASH存储器的写保护功能。) i  W  R7 ]" C5 @0 z6 ]3 B
7 [) i: n# B6 \1 Z$ ^5 k) q
打开写保护功能:) @3 h- n4 n. E+ k
在程序中,取消“#define WriteProtection_Enable”前的注释符号,即可打开写保护功能。想要对一系列页面进行写保护的话,用户可以调用FLASH_EnableWriteProtection函数,通过设置该函数的参数,我们可以对任意页面进行写保护。在本例中,我们想要对24 — 31这八个页面进行保护,因此,参数为"FLASH_WRProt_Pages24to27 | FLASH_WRProt_Pages28to31"。- ~: ^( }* [4 U4 p6 ^; q- U3 `/ \
6 Q6 m  U, T# t9 p+ h, U6 F7 _
为了对载入新的option byte 值,需要对系统进行复位,因此,我们调用函数 NVIC_GenerateSystemReset()。2 Q' i; q% z& D) x2 r- q4 F

$ R: n( Z3 k9 E7 {# t( B8 X关闭写保护功能:7 W1 y! H  r0 X* |+ h& J/ I
在程序中,取消“##define WriteProtection_Disable”前的注释符号,即可关闭写保护功能。为了关闭写保护,用户必须擦除小信息模块(small information block)。此操作可以通过调用函数FLASH_EraseOptionBytes来实现。7 k+ K1 y) J5 \, U, c
# B, `4 b* N3 [- h( C! K; G1 k1 K- S
同样的,为了对载入新的option byte 值,需要对系统进行复位,因此,我们调用函数 NVIC_GenerateSystemReset()。
# y$ v( s# f$ n: W+ Y
* K% u9 h/ S4 x% X' i& E在本例中,程序将对被保护页面进行一次擦-写的操作,并在最后检查操作的完成情况,并把检查结果放在变量MemoryProgramStatus中。显然,如果打开了写保护功能,那么结果将是FAILED,如果没有,结果将是PASSED。) _' I7 E1 _) Q4 j" t2 c1 D, Y1 `
# N7 ]% q" E6 F; c4 L
Exemple 1' N; W, k' c1 h

2 R( q1 K: D$ p& c# A8 T6 ~本例展示了如何通过设置GPIO BSRR寄存器(Port bit set/reset registe)和GPIO BRR寄存器 (Port bit reset register)来翻转IO的状态。( X# T" u8 a6 R( R1 ]
3 G* d+ d# C0 [% i1 D3 r
通过设置这两个寄存器,我们可以利用单比特操作(single atomic write access)来改变一个或者几个IO端口的状态。4 z8 t- [1 z; c4 M& s# U

+ `1 i7 a, ^5 F1 @2 D7 f; I这个例子原本应用于STM32评估板(STM3210B-EVAL),为了使本例能在EKSTM32F上运行,我们应当把使用端口PC.06 – PC.09改为使用PC.04 – PC.07。+ A! J; w2 Q, s( l9 _$ b$ n+ c

" R% p" Y5 \+ YExemple 2* M8 c" c- f/ ?. ~
9 \2 f; B" ^3 n' t( G5 R' q& m: A
本例展示了如何把JTAG专用管脚设置为标准的GPIO。# i, w; O; W5 F: g$ }
& P( {, M  z8 }8 L+ q) Y' J, t
首先,关闭SWJ-DP,把SWJ-DP管脚设置为标准的push-pull输出。然后,循环地改变PA.13(JTMS/SWDAT), PA.14(JTCK/SWCLK), PA.15(JTDI), PB.03(JTDO) 和PB.04(JTRST)这五个管脚的状态。使与之相连的LED闪耀。在EKSTM32F板上,不存在这样的五个LED,要观察效果的话,需要自己连上去。* q' U0 [9 s5 y
3 E" Q  N; ^9 h4 @. `/ q
注意,一旦JTAG管脚被用作它用,将无法再使用debug工具。为了避免这个问题,程序将检查PB.09上的数据,它与一个按钮相连,当输入为低电平时,JTAG专用管脚被设为标准的IO。当输入为高电平时,这些管脚仍然用作JTAG。& [: V( k) X) U" a2 S

. ^7 I# x( D! N  W/ |8 p出处:barboon
赞 收藏 评论2 发布时间:2008-9-3 19:11

举报

2个回答
nokoyu-113155 回答时间:2009-6-10 16:38:40

RE:Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)

heishadow-13786 回答时间:2010-11-9 18:44:40

RE:Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)

!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版