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

初学STM32F0探索套件之《STM32F0DISCOVERY点亮LED》

[复制链接]
chen8710 发布时间:2013-12-14 22:11
 点个LED看似简单,实际上它是在了解ST的编程特点及寄存器控制基础上的。# i( K9 d% Y% j4 q7 r) W
一、启动
5 P; ]+ N0 A. T6 x' u
ST的公司的例程中,使用startup_stm32f030x8.s文件作为启动时执行的第一步。在这个文件里要执行的工作是:
: c9 ~' b3 g, F8 p( I
n        初始化SP;
/ k3 J0 Z/ W' @1 k  J7 ~
n        初始化PC指针 --- 指向iar_program_start

$ x( e8 B" d6 Y- _( A, {8 b$ ]
n        设置中断向量表各exception的地址
( D- r7 P$ c: H4 f
n        配置系统时钟
& o+ Y; n5 ~. u0 Z: O+ r( M) n
n        转向C语言的main函数
5 w" p5 g2 W- i! [" E+ _
 
% C% e, U3 @# o% p
复位入口的指令为:

$ ?7 l, L0 u. N! ~. ]  V" P2 o
Reset_Handler
7 ~5 `, `( a' M' Z& c* B8 c
       LDR     R0, =SystemInit

+ l' g/ a+ A- a- P% N% z( x
       BLX     R0                              // 调用SystemInit()函数。这个函数在
# c5 j3 q! s! |2 P% f7 V) a5 u6 i/ h
                                                               //  system_stm32f0xx.c文件中。

5 k1 \' ?! n+ `( d, m
       LDR     R0, =__iar_program_start

4 z% L' d, ~$ b+ `
       BX      R0                              // 跳转主程序

) V; ?: t! j# \) [! C$ N9 T& G
 

  d2 M5 x8 z# V. ~* H* K- M, d8 w
可见,ST公司的方法,对系统时钟等的初始化,并不是在main()函数中执行的。

# {) S+ @$ x8 `' p; C  `
SystemInit()函数中,设置RCC的几个寄存器,初始化系统时钟。
" k9 Z" X  I3 P% F
…………

; M8 V: @7 d0 H  Y0 b7 `4 F  ^
#ifdefined (PLL_SOURCE_HSI), q6 @: F* K3 e9 G2 A
  /* At this stage the HSI is already enabled *// M- v% W" q3 h* }- h, g- S
   …………; [& j: J. y! g$ X) H/ N
#else
7 {1 K! {' y0 g0 q#if defined (PLL_SOURCE_HSE)
8 [: |' \/ u8 K0 W& i  /* Enable HSE */    * ?8 e% E( K8 s
  …………
4 {3 m8 ~1 Q- y# M+ t2 f#endif

; b5 F& a/ `% E( x
 
1 X5 E& \( P& c; g5 S# P" u( `
二、延时函数
& N6 I2 j/ ?) F
在早期的单片机应用中,一般使用循环来延时,而M0有SYSTICK,使用它延时就可不占CPU时间。

. r  H9 y& a5 y6 c# L; D
1、配置Systick
9 w9 R$ U+ h6 D. }$ I
使用SysTick_Config()函数完成。

/ p' H  J0 |* u, V) i! r" ]
2、在中断SysTick_Handler中实现计数
  d# W' {  p  |$ ~# [6 b
void SysTick_Handler(void)

" r6 |# t  V$ J
{
# Y3 j1 I: T: |9 {: `1 p' d
  if(TimingDelay != 0x00)

0 H' G* A+ A! M4 }: L3 v, A
  {

- l# q+ B. F7 E0 d: U
   TimingDelay--;
- m1 x0 u, P" Q7 w
  }
* x: A% `: L0 F% M: W  [
}

  E. E6 ]. ^; I4 S3 X, }
三、IO控制

' G! l. H9 d" d+ @
stm32f030的IO功能主要有
. s7 y) \" Y4 `1 T  A7 c1 K# V
l        输入悬空

- ~: w6 e) ~7 @3 B8 P, p" Q
l        输入上拉

4 L" w3 K% C( ?- @$ k0 p  e& A
l        输入下拉

8 M  K% \! u* q3 {/ T% j/ f
l        模拟信号

6 O+ g7 T3 D, p. f, k
l        输出开漏加上拉或下拉

9 _/ o2 |8 r0 b
l        输出推挽加上拉或下拉

0 r$ W& E* \9 t, b' X/ e
l        其它功能推挽上拉或下拉
+ s5 z4 a3 r- J- Z
l        其它功能开漏上拉或下拉
. O. n2 Y! Q- K
IO的控制寄存器实现以上功能。有端口上(下)拉控制寄存器、置位寄存器、清0寄存器、切换寄存器等12个控制寄存器。对LED的控制,使用数据输出寄存器。

; D- V2 _" X0 U
 
8 U3 b4 d+ {2 `- k) n  M7 g
四、程序
) U5 @% P$ D  E+ }5 _2 X# M
int main(void)

2 E/ _3 |% g' f* T; Q
{

4 v# ^! O  k8 I# \# q3 f
       LEDInit(LED3);

1 j" P% v, L! g8 ]% G7 Y5 \, F5 x
       LEDInit(LED4);

  b; M; s, o9 ?, K# W
 
/ n$ N) }& d! @+ ^' J' @
       /*Turn on LED3 and LED4 */

* J- {  L' Z+ T6 v% ^
       LEDOn(LED3);
, G2 }1 y* ^' a! e
       LEDOn(LED4);

3 f! y0 T. a: M/ R
 

5 V6 F+ F4 n+ b  [
       if(SysTick_Config(SystemCoreClock / 1000))
2 s7 F+ g6 [, K3 Q/ e
       {
$ d$ o: z. H3 s* a! e: b, a( z1 j
              /*Capture error */
7 u: H$ w! U  O; J( m
              while(1);
6 U2 c. \: O% O
       }

* I+ N5 ~4 q# k
      
' Q" i/ v7 U9 P0 U5 P9 j
       for(;;)

$ B6 c9 _" J1 y' _6 Q
       {

, J( S5 ]9 }* M1 I) D; o7 q
   /* Toggle LED4 */
+ ~( X' u! K) d. |
    LEDToggle(LED4);

% C* a( _5 l; @' v1 O
 

. F  {$ f5 G7 K. z- y1 B
   /* Insert 50 ms delay */
# |) A7 Q( G, C
   Delay(50);
8 ]3 t" @" y# X0 R8 U& y
 
, P% j) D( I; R8 j0 t7 F: {
   /* Toggle LED3 */
8 A5 D. o) N% s8 E% y( l3 J" |( Y
   LEDToggle(LED3);
) ^( t' I0 \* \9 j) ^
 
  B, [. N' s- j( @
   /* Insert 100 ms delay */
- f  X% \& \: S; Y7 ], h* ~5 P" W
   Delay(100);

9 t% U3 o0 ?% e3 K, Z/ Q
       }

' ~- ?& a; f: |8 D9 F
}
赞 收藏 评论2 发布时间:2013-12-14 22:11

举报

2个回答
沐紫 回答时间:2013-12-16 15:02:34

RE:初学STM32F0探索套件之《STM32F0DISCOVERY点亮LED》

多谢楼主~
% H& G# z6 q( ~9 y: @, { & t: d: Y) O2 ~% f* E' x
 
, {% E& `" f% }( N已添加到社区网友原创汇总:
) S) z9 b5 Y6 x: A2 m; k% kSTM32F030探索套件开发日志,中文教程,使用问答70篇
zhenweiaaa 回答时间:2020-8-29 20:50:23
谢谢LZ

所属标签

相似技术帖

官网相关资源

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