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

STM32再学习——启动流程分析

[复制链接]
党国特派员 发布时间:2015-1-7 13:14
  我们写嵌入式程序,基本上采用C语言来编写,以main( )作为程序的入口。但实际上,mian()并不是最先要执行的,在这之前需要做一些基本的工作,如堆、栈的定义;main函数的复位连接等,这些工作就需要一个专门的启动程序来完成,由于需要做的工作内容不多,并且需要更直接的管理内存,一般采用汇编编写。/ D2 O7 [- q. R1 s; A" \
  无论是STM32ARM系列的单片机,还是简单的如51,PIC等,都以为上述原因,需要启动程序,只不过51,PIC等单片机的启动程序已经在相应的IDE编译、链接的时候隐含的编译了,故在写单片机程序的时候无需考虑。而STM32的启动有相应的启动文件,本文将采用KEIL MDK自带的启动文件STM32F10x.s进行分析。
( [8 z, `3 s% i  1 启动模式的选择- n. B0 q' s6 e, B* ^
  STM32芯片自带的启动方式有3种如下表4 i' I6 c+ i$ x: P/ n! Z
: f0 x6 o7 t1 U
启动模式选择引脚
启动模式
说明
BOOT1
BOOT0
X
0
主闪存存储器
主闪存存储器作为启动区域
0
1
系统存储器
系统存储器作为启动区域
1
1
内置SRAM
内置SRAM作为启动葡萄
  STM32的启动选择,通过设置BOOT1、BOOT0的引脚的高低电平即可选择。其中主闪存启动是将程序下载到内置的Flash进行启动(该flash可运行程序),该程序可以掉电保存,下次开机可自动启动;系统存储器启动是将程序写入到一快特定的区域,一般由厂家直接写入,不能被随意更改或擦除。内置SRAM启动,由于SRAM掉电丢失,不能保存程序,一般只用于程序的调试。
% C+ k2 |% P% u& H  就程序的启动而言,采用以上3种方式启动,但对于一个嵌入式系统的程序来说,如果程序执行文件很大,而STM32内置的存储空间有限,就需要外置Nand flash/Nor flash 和SDRAM,即程序存储在flash中,程序执行在SDRAM中,既节约了成本有提高了运行效率。如果采用外置的Flash+SDRAM的方式,就需要一个更加复杂的启动文件(bootloader),需要考虑flash的COPY,Flash的驱动,内存的管理,通信机制等,本文暂不涉及此内容,以后有机会专门讲述。
0 x/ T' x7 O( _( v. M# L  2 启动文件STM32F10x.s分析: M3 _4 {+ R+ L" c
  关于STM32F10x.s的启动文件,主要做了3个工作:分配和初始化堆、栈;定义复位向量并初始化;中断向量表及其相应的异常处理程序。
: o# M9 I8 |: Y: N) M# m8 C/ V  2.1 定义堆、栈及其初始化
1 l! t3 N4 H5 O1 ?. T  堆和栈是能够运行C语言的前提,如以下程序:7 B" S- [6 e, Z+ v
  定义栈:
: N# b, T' O6 {: l( O6 [0 U  Stack_Size EQU 0x000002002 A4 r9 `+ F- b6 F$ J2 P
  AREA STACK, NOINIT, READWRITE, ALIGN=3$ }/ j8 t0 F  q1 O
  Stack_Mem SPACE Stack_Size' w$ m/ _. i  W! _
  __initial_sp
% P" R) I9 d+ P' P- U: H  定义堆:9 k8 r2 n- A. l2 u& w1 U
  Heap_Size EQU 0x00000000
6 L2 F5 p7 `" j. I& v9 u: k# w  AREA HEAP, NOINIT, READWRITE, ALIGN=37 e- `# Z! k- Y  p0 n
  __heap_base( u& b/ T$ b# t* Y4 H
  Heap_Mem SPACE Heap_Size7 r& ?4 q4 P' C' S+ n% B
  __heap_limit
# T4 J" w1 g1 Y  初始化堆、栈:. `; E1 v" [; K& b' u
  _user_initial_stackheap/ N& Q6 Y! s( Q, p8 t# I! S
  LDR R0, = Heap_Mem: u; J7 ^: ^$ ?
  LDR R1, =(Stack_Mem + Stack_Size)+ v4 Y  g- r1 M3 N. D1 r
  LDR R2, = (Heap_Mem + Heap_Size)
8 U7 h2 I  J7 F: y6 M/ \  LDR R3, = Stack_Mem
: E8 t3 e) X8 ]2 [2 j- j  BX LR  g6 X( q7 C$ C+ I" \. G8 ]
  2.2 定义复位向量
* E7 U, c. t& g& L' N1 e& D  Boot引脚的设置不同,复位时,起始地址的位置不同,SRAM的起始地址为0x2000000, flash的起始地址为0x8000000。Cortex-M3内核规定,起始地址必须存放堆定指针,而第二个地址必须存放复位中断入口向量。在系统复位时,内核会自动从其实地址的下一个地址(即32位)空间取出复位中断入口向量,然后跳转到复位中断服务程序,该服务程序就会跳转到main()执行程序。! \% W3 R9 y: u) J" s' o+ ~
  中断向量表(部分向量):
8 W1 W8 Z  k# n" U2 Y9 h  __Vectors
3 Y" C) j6 F+ q  DCD __initial_sp ; Top of Stack // 初始化堆跳转( m, r& h; r/ T* u
  DCD Reset_Handler ; Reset Handler // 复位中断向量跳转! Z  U* Q7 i" s; `
  DCD NMI_Handler ; NMI Handler( V! S6 B+ r6 F2 z
  DCD HardFault_Handler ; Hard Fault Handler: Q7 H7 M2 S- l5 q- k
  DCD MemManage_Handler ; MPU Fault Handler1 P$ Z/ W1 o2 z' N
  DCD BusFault_Handler ; Bus Fault Handler
; w9 Y" L7 N$ W2 g  DCD UsageFault_Handler ; Usage Fault Handler
+ t/ L+ o, e: Z& m2 K: H  DCD 0 ; Reserved* }1 c; @! |: s, g0 v; y
  DCD 0 ; Reserved
# n8 O, _7 ~) ]& p! y/ P  DCD 0 ; Reserved
" j, k" C+ A2 V$ E3 T( x  DCD 0 ; Reserved
' z2 K' {" i2 {: ]6 i- R  DCD SVC_Handler ; SVCall Handler
" p* c% z* ]) X2 A, W" c  DCD DebugMon_Handler ; Debug Monitor Handler6 |* A; a( M+ s: K$ e
  DCD 0 ; Reserved; G3 m) V/ I4 Y& |& h% b) T( Y6 x8 m
  DCD PendSV_Handler ; PendSV Handler
, A, y2 I' @/ q1 G  DCD SysTick_Handler ; SysTick Handler
* |, F$ v5 ~* q/ g  复位中断服务程序
$ ~* q8 R0 T1 J8 _  ; Reset Handler // 该程序会跳转到main()+ k4 C2 d; \- ~8 @. G
  Reset_Handler PROC; T4 }' ?9 B; w7 E. S% ]4 X
  EXPORT Reset_Handler [WEAK]# w1 z# |: t2 a/ R
  IMPORT __main
- Y8 {7 r# S% h' o& Y  LDR R0, =__main
6 f4 e$ j$ P4 K$ b1 g  BX R0
; i* V' i9 s0 Z0 q! p# p+ l  ENDP$ L  z8 J  L3 `
  3 其他中断向量及服务子程序* b3 W( U$ P0 y' |7 o! m3 C. i
  在启动文件中,只定义了中断向量,其相应的服务子程序跳转到空操作。为以后扩展中断服务程序做了准备。
7 L6 p1 \7 y2 Z  在以上这些都胜利跑完之后,我们的微处理器(MCU)就开始main函数之旅……
; ~2 s: T, A& ^4 `  E3 c5 Z$ C
% z: l3 c6 D% \, j, s" ^0 N$ L
收藏 评论1 发布时间:2015-1-7 13:14

举报

1个回答
moyanming2013 回答时间:2015-1-7 15:09:36
过来支持下

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版