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

通过Firmware Lib在EK_STM32F上的学习体会

[复制链接]
endlesswind 发布时间:2008-9-3 17:27
简单的说,就是把原来基于评估版()Firmware Lib上各个外设的应用示例移植到EK_STM32F上运行。 工具IAR,使用方法:直接利用Firmware Lib的project,打开FWLib\project\EWARM打开Project.eww,并用相应文件覆盖project目录下的同名文件即可(main.c,etc)。
. Z! W2 q5 _2 f- t# E
) X$ O0 m( Z6 x3 M" t3 }Firmware Lib下在地址:
# L3 Z' R  z( x: u- u" Y0 lhttp://www.st.com/stonline/products/support/micro/files/um0427.zip7 n/ D" g) ^6 a) u8 M& g0 G' T
Firmware Lib用户手册下载地址:
3 l. m5 J# z! X: m- nhttp://www.st.com/stonline/products/literature/um/13475.pdf
' {) [! p1 E, G! a5 o: u& L% m9 V
! L7 i2 y- P+ Z6 B8 f- W2 H' KADC Exemple 1:
' F; s8 J* Q2 l: \; @这个例子是利用ADC把通道14上(ADC Channel14)的模拟输入转换为数字值,并利用DMA将转化结果传送到ADC_ConvertedValue。# V' j7 y5 D# L4 |- O% y$ ^" Z* w4 l4 O
我的改动:
- G- G7 J6 A% ]/ P6 N* X. Z1.由于评估版上ADC Channel14(PC.04)与分压计相连,而在EKSTM32F上,相应的管脚为PC.00(ADC Channel10),因此,在程序上也要有相应的改动(包括主程序main()和I/O配置程序GPIO_Configuration())。3 H# I' I+ W0 v2 }2 i  S8 {
2.为了是演示更加直观,我把转化结果ADC_ConvertedValue的值也显示在EKSTM32F的LCD屏幕上,为此,在程序中加入文件lcd.c和lcd.h(可以直接使用学习班ADCdemo的同名文件),并想ADCdemo一样,使用LcdShow_Init()来初始化用于LCD显示的TIM2,在中断配置NVIC_Configuration()和中断程序文件stm32f10x_it.c中,也要把对应的代码加上去。6 h1 ^; z  D" M( V
运行本例,屏幕上就会显示PC.00(ADC Channel10)上的模拟输入值,0x0FFF对应最大值3.3V。
5 S8 Y" r+ U* d" g- v$ d8 _8 K
8 P# ]1 ~- Y, U. }5 H4 V" Q' eADC Exemple 2:8 |4 R; ^( A5 k! p/ o% t
这个例子是利用来自定时器TIM1的外部触发,来启动ADC,先把转化通道14上(ADC Channel14)的模拟输入,并利用DMA将转化结果传送到表格ADC_RegularConvertedValueTab,再转化完成后,ADC会自动启动对通道11上(ADC Channel11)的转化,并在ADC产生的中断中,把结果存入表格ADC_InjectedConvertedValueTab。9 f$ q. h: [, m' n  ?9 f% f7 H8 C
我的改动:
2 l( z6 j% }0 A1 L1.和exemple1一样,把ADC Channel14改为ADC Channel11
% M& O4 {; `6 O4 w8 P- J/ c6 ?5 @2.和exemple1一样,利用LCD把ADC_RegularConvertedValueTab和 ADC_InjectedConvertedValueTab中的一个值,交替显示在屏幕上。
+ [$ k/ t# l; L+ B/ t$ {5 v& E; n如果把PC.01管脚(ADC Channel11)悬空的话,我们会发现,转换结果会是任意值,假如把它接地或者高电平,那么就会显示0000或者0FFF。5 ^/ L7 Q1 p9 e+ m! ]+ A
7 u# z; `, @2 a! R
ADC exemple 3: 9 \1 ~: I- k2 @% f% l* D) v+ t
这个例子的作用是示范如何使用ADC的看门狗来监视某一个ADC输入通道。7 z, ^% L1 S" @1 y4 c5 Y
我的改动:
, l' t5 q; @$ x  a& e5 z1.和exemple1一样,把ADC Channel14改为ADC Channel11
( |7 r- j% q$ t4 n, J8 A运行本例,调节分压器VR1,当模拟输入超出指定范围时,产生ADC中断,中断改变IO口的状态,与PC.06相连的LD3会亮起。监视范围为预设的0x300 - 0xB00,即0.62V - 2.27 V,我们也可以在程序中调整。
, I+ L$ m) ~/ _. W- \7 {) G0 i: t
  X( P" ~4 N" `; Q$ UADC Exemple 4:
( t% N  e! f# d7 I本例展示了如何利用2路外部信号来触发ADC对多路模拟信号进行regular转换和injected转换。5 k/ k. A/ D4 E1 B  h. N" Q" M$ V
运行程序,在EXTI11线路上(对应管脚PE.11)上的上升沿信号,将触发ADC1对ADC信道4上的输入进行regular转化,并通过DMA将结果传送到内存中的ADC_RegularConvertedValueTab表格,在下一个上升沿信号,将触发ADC1对ADC信道14上的输入进行regular转化,结果也会通过DMA传送到同一张表格中。我们设置DMA模块,将传送量限制为64个数据。1 m; H$ A3 B4 _- d2 R# _" E
同样的,对于EXTI11线路上(对应管脚PE.15)上的上升沿信号,将触发ADC1对ADC信道10和ADC信道14上的输入进行injected转化,转化完成后产生中断,中断中我们把转化结果传送到ADC_InjectedConvertedValueTab表格。0 j, ^/ @0 X; a# ?4 B% a4 @
对于EKSTM32F板,由于管脚PE.11和PE.15已经被LCD占用,因此,我们改为利用管脚PD.11和PD.15,分别对应板上小键盘(KEY4)的SEL建和DOWN健。
/ `' }. Z6 l( `5 Y0 e8 I由于分压器(VR1)连接在通道10(ADC Channel10)上,因此我们把这个通道上的转化结果显示在LCD上,用来验证。4 ~; X" _2 z5 m) T5 I1 _- m

7 m& e1 c6 w* q9 h" HADC exemple 5:
/ S9 [" {0 }  v: o; _本例展示了如何使用双ADC对多路通道进行同时转化。# m) i# C& E& R7 _" `5 F9 n
我们使用ADC1对通道14和通道17进行转化。使用ADC2对通道10和通道11进行转化。% _& T2 C. z1 u7 g
对于通道17,它与内部参考电压Vref相连。: I1 U1 @+ k- M  K
一旦转换开始,ADC1和ADC2对对通道14和10的转换将同时开始,结果存于ADC1的32-bit DR寄存器内,其中高16bit为ADC2对通道10的转换结果,低16bit为ADC1对通道14的转换结果。之后由DMA把DR寄存器内的数据传送到内存中的ADC_DualConvertedValueTab表格。随后,ADC1和ADC2以及DMA会对通道17和通道11进行同样流程的转换和数据传送。' s$ L9 z" W# p' @: b2 Y
这样的转换-传送将会持续进行直到传送的数据数目达到DMA预设的上限。
6 l8 V  J& E! m对于EK-STM32板,我们可以利用LCD把通道17上Vref的值,和通道10上分压器VR1上的电压值交替显示在屏幕上作为验证。
5 A( `% f: Z# [. o$ `8 r$ T
, F+ j: ~' x5 O; K# W数据备份寄存器(BKP) :: f# P' m: l; U% e

" B; N0 _8 F7 Y5 w示例1
8 @& _1 ~: A; B本例展示了如何读写STM32的备份寄存器(Backup data registers),并且展示了配套的防篡改功能。) F3 S4 k' b  n. m
运行程序,首先,会激活防篡改功能,并且许可相应的中断。然后,程序向所有的后备数据寄存器写入数据,并核对,如果正确,点亮LED1(EKSTM32F上的LD5),如果不匹配,这点亮LED2(EKSTM32F上的LD4)。) \0 G+ E9 p+ h4 E/ y+ n: i
如果我们对防篡改管脚(ANTI_TAMP pin / PC.13)输入一个低电平来模拟一次篡改企图。这时所有的备份数据寄存器都会被清零并产生一个中断。在这个中断中,程序将会检查所有的备份数据寄存器是否被成功地置零,如果是,亮起LED3(EKSTM32F上的LD3),如否,就亮起LED4(EKSTM32F上的LD3)。, g  J$ M6 ?% x8 x9 V
对于EKSTM32F,由于4个LED分别被连接在管脚PC.04 - PC.07,而在STM32-EVALB上,4个LED连接在PC.06 - PC.09。我们对上述程序只需要作相应的改动即可。
( \5 R* }' m& G0 @" K; F运行程序,我们发现版上LD5亮起,这标志数据被正确地写入备份数据寄存器。如果我们对PC.13输入个低电平,我们会发现LD3亮起,这说明防篡改功能发生了作用,数据被成功地置零了。
5 t  c; b2 W/ m+ I6 e$ Q6 f! i' S, Y: B7 y  J' u
示例2
7 p& N# V: |0 @. T0 w8 C( k本例展现了如何利用数据备份寄存器来存储数据,我们可以利用电池来保存这些数据。如果我们通过电池向STM32的VBAT端口供电,即使正常的VDD被切断,数据备份寄存器中的数据仍然能够保存下来。- o- E" D+ f6 x2 L! U
运行程序,首先,系统会检查是否发生了上电重置(power up reset),如果是,则会核对数据备份寄存器中的数据。如果我们连上了电池,那么数据在经过了上电复位后,仍能保存下来,如果没连上电池,这数据就会丢失。如果发生的是外部复位,那么,我们不会检查数据备份寄存器。
  t' K3 U0 X: y/ g四个LED分别被用来表征如下操作:* {* S, [) p- f9 _: M' Q7 W3 {
LD3:亮起表示侦测到上电复位/ i$ F+ }! H" }7 j" Y
LD5:亮起表示经检查数据备份寄存器中的数据正确无误
' O+ T& K& @4 O2 \4 lLD4:亮起表示经检查数据备份寄存器中的数据有误. L- u+ A8 @" l  C( R' g
LD2:亮起表示程序正常运行( K0 {. z! v/ h4 k! S
在EKSTM32F版上,通过调整跳线JP7,我们可以选择是否将电池连上STM32。我们可以通过插拔USB电缆来模拟掉电上电,当电池连上的时候,我们会发现LD5、LD3、LD22 N/ A+ z4 n+ R+ \
亮起,反之,则是LD4、LD3、LD2亮起。0 O3 ], p- b1 M$ B" [* o5 L
1 T5 k! P" _+ X& ]0 ]3 D
出处:barboon
收藏 评论1 发布时间:2008-9-3 17:27

举报

1个回答
yifei_515 回答时间:2009-7-15 17:24:04

回复:通过Firmware Lib在EK_STM32F上的学习体会

好帖子啊!解决了我的一个大问题!我在调试的时候设置了RTC_SetAlarm(RTC_GetCounter() + 3);然后进入待机模式,可怎么也唤醒不了。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版