前段时间对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
~~~
这是我自己写的一个函数,因为我每次程序一开始跑,我就像让他运行这段代码,所以我就把他也加到这里了!
可见,我们如果想在进入主函数之前运行什么,那么我们就可以在这里加我们需要的代码;
一定要注意我加的位置,他其实上就是入栈和出栈的做法!所以我们一定要注意入栈和出栈的顺序!
![](https://box.kancloud.cn/2016-06-21_576915b9e24be.jpg)
我们在来看看其他的中断处理,也都是同样的道理!
~~~
PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK]
B .
ENDP
SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK]
B .
ENDP
~~~
ok,这个其实很简单,不过很实用!
PS:有的人用的是库里面的bootloader,为只读文件,我们需要把他删了,重新复制一个添加进去!
- 前言
- 【菜鸟入门】stm32的第一个程序--LED
- 【菜鸟入门】stm32 之 扫描按键
- 【菜鸟入门】stm32 之 中断按键
- 【菜鸟入门】stm32 之 USART
- 【菜鸟入门】stm32 之 iic
- 【菜鸟入门】stm32 之 eeprom
- 【菜鸟入门】stm32 之 pwm
- 【菜鸟入门】stm32 之 ADC 模数转换
- 【菜鸟入门】stm32 之 实时时钟
- 【菜鸟入门】stm32 之 DMA
- 【菜鸟入门】stm32 之 DAC
- 【STM库应用】stm32 之 USART
- 中断源去抖办法
- stm32 启动代码应用技巧
- 【STM库应用】stm32 之 IIC应用
- 【STM库应用】stm32 之 中断按键初始化(注意事项)
- 关于结构体初始化
- 【STM库应用】stm32 之 TIM (详解一 通用定时器)
- 【STM库应用】stm32 之 TIM (详解二 脉冲宽度、周期测量)
- 【stm32库应用】SD驱动移植(基于SDIO外设)
- SD卡fat文件系统移植
- stm32 DMA初始化选项研究
- stm32 灵活静态存储控制器(FSMC)(NORFLASH\PSRAM)
- 【stm32+uC/OS-II】ucosii移植简单详细步骤
- STM32 加入调试信息来调试代码
- NRF24L01 无线通信模块使用