stm32 启动代码应用技巧

前段时间对stm32的启动代码进行了一个小小的研究,发现了一些比较好用的技巧,在这分享下!

总体上说,整个启动代码就是中断初始化为主,以及中断之后如何进行调配函数!

首先看这么一段代码:Reset_Handler

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
	 IMPORT  SysInit
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
				 LDR	 R0, =SysInit
				 BLX	 R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

这其实上是Reset中断后生的事情,不难发现,这也就是进入主函数的通道!

我在这里加了一个

	 IMPORT  SysInit
				 LDR	 R0, =SysInit
				 BLX	 R0

这是我自己写的一个函数,因为我每次程序一开始跑,我就像让他运行这段代码,所以我就把他也加到这里了!

可见,我们如果想在进入主函数之前运行什么,那么我们就可以在这里加我们需要的代码;

一定要注意我加的位置,他其实上就是入栈和出栈的做法!所以我们一定要注意入栈和出栈的顺序!

我们在来看看其他的中断处理,也都是同样的道理!

PendSV_Handler  PROC
                EXPORT  PendSV_Handler             [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP

ok,这个其实很简单,不过很实用!
PS:有的人用的是库里面的bootloader,为只读文件,我们需要把他删了,重新复制一个添加进去!

文章导航