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

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

[复制链接]
qazwsx-19104 发布时间:2008-9-3 19:11
Exemple 1
) l6 J6 P7 }0 n1 i4 z- L% `7 U" e9 m$ r+ Z+ B1 T& S# O
本例展示了如何对STM32的FLASH写入数据。
  f5 {$ [2 _% Z: b7 Y; m8 O. R* D8 k7 p' \! X
在RESET以后,FLASH存储器的写/擦控制器(Flash memory Program/Erase Controller)是被锁住的,为了能够写入数据,首先要求对控制器解锁(FLASH_Unlock())。
2 D+ m+ |& n5 ~5 x9 q5 L
* A7 o4 ]" I1 i! G& O4 X在写入数据前,程序首先擦除所有要编辑的页面。擦除程序首先计算需要的页面数目,然后通过不断调用FLASH_ErasePage函数进行逐页擦除。之后,程序不断调用FLASH_ProgramWord函数对FLASH写入数据。待整个过程完成以后,检查FLASH中的数据是否已被正确写入,检查结果放在变量MemoryProgramStatus中。
1 Q1 b# e: U8 _$ i" [. M- a
4 {4 a+ x+ P& f  n- t. _Exemple 1, A% t# B$ F7 s1 O/ M  o' L

3 ^4 k" b! T% `2 h1 w本例展示了如何开启/关闭STM32 FLASH存储器的写保护功能。
: ~6 b- B- g- l- H& w
$ L0 R  ~* s6 ~& n打开写保护功能:3 u2 l- ]5 k8 w, [! Y
在程序中,取消“#define WriteProtection_Enable”前的注释符号,即可打开写保护功能。想要对一系列页面进行写保护的话,用户可以调用FLASH_EnableWriteProtection函数,通过设置该函数的参数,我们可以对任意页面进行写保护。在本例中,我们想要对24 — 31这八个页面进行保护,因此,参数为"FLASH_WRProt_Pages24to27 | FLASH_WRProt_Pages28to31"。; h) z) N$ h0 p5 J

. {2 X# v) f& r为了对载入新的option byte 值,需要对系统进行复位,因此,我们调用函数 NVIC_GenerateSystemReset()。; W1 Q* f, R- Z+ u. t

9 I: b; |$ a  f$ n; H: K关闭写保护功能:
3 j5 @5 H2 ]3 |' s( G3 w在程序中,取消“##define WriteProtection_Disable”前的注释符号,即可关闭写保护功能。为了关闭写保护,用户必须擦除小信息模块(small information block)。此操作可以通过调用函数FLASH_EraseOptionBytes来实现。" U3 }6 N$ C  N8 q% K0 g2 K

( j* F$ F7 T; A; ~0 |) z0 q. d# g同样的,为了对载入新的option byte 值,需要对系统进行复位,因此,我们调用函数 NVIC_GenerateSystemReset()。
! [1 T$ J% t+ n- \! h
+ q  K/ {: r" G1 g/ Y在本例中,程序将对被保护页面进行一次擦-写的操作,并在最后检查操作的完成情况,并把检查结果放在变量MemoryProgramStatus中。显然,如果打开了写保护功能,那么结果将是FAILED,如果没有,结果将是PASSED。
- B/ T6 Y, h/ F3 x% n- M6 L* H9 T- S+ c5 v: W: q" _
Exemple 1
2 c+ E" q- P' h& g$ g9 W2 I5 t6 b3 d4 o
本例展示了如何通过设置GPIO BSRR寄存器(Port bit set/reset registe)和GPIO BRR寄存器 (Port bit reset register)来翻转IO的状态。
6 s8 K  x3 V' n4 j7 f
0 j/ Q$ g* w$ {5 E+ J5 t+ x1 t通过设置这两个寄存器,我们可以利用单比特操作(single atomic write access)来改变一个或者几个IO端口的状态。
/ ~' R) ]7 y6 n; r3 L9 B; s& [
3 t: X- W6 t+ k1 J; E* t2 Q, j这个例子原本应用于STM32评估板(STM3210B-EVAL),为了使本例能在EKSTM32F上运行,我们应当把使用端口PC.06 – PC.09改为使用PC.04 – PC.07。
# I1 M7 F- u4 i& K4 c, y) Y$ `
$ [1 ]" H& J* y; LExemple 2
, Y/ W" g2 j/ h8 ~9 c" P9 L$ n8 l3 R% i1 J
本例展示了如何把JTAG专用管脚设置为标准的GPIO。
5 t$ O' n* s9 a- d0 |% T; K! S5 G8 a+ S- i: h+ `1 A" a
首先,关闭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,要观察效果的话,需要自己连上去。
7 ?0 [) g! z) V/ V
" v4 q8 D) P4 {4 }; m; Z. @8 F注意,一旦JTAG管脚被用作它用,将无法再使用debug工具。为了避免这个问题,程序将检查PB.09上的数据,它与一个按钮相连,当输入为低电平时,JTAG专用管脚被设为标准的IO。当输入为高电平时,这些管脚仍然用作JTAG。
  m/ b; y1 @/ o3 C: T
/ M1 G0 e8 n5 P& J出处: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版