一、新建工程模板——寄存器版本
- 开发环境:MDK5
- 软件包:STM32CubeF4包
新建工程模板的一般步骤为:
-
新建工程目录,复制需要的文件到工程目录
首先,打开MDK
软件。然后点击Project->New uVision Project
弹出如图所示界面:
之后,弹出选择器件的对话框,如图所示。因为ALIENTEK
阿波罗STM32F429
开发板所使用的STM32
型号为STM32F429IGT6
,所以在这里我们选择:STMicroelectronics->STM32F4 Series->STM32F429->STM32F429IG->STM32F429IGTx
点击 OK,MDK
会弹出Manage Run-Time Environment
对话框,如图所示:
这是MDK5
新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以在图中所示界面,我们直接点击Cancel
,即可,得到如下界面。
到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c
文件等。需要引入下面文件
启动文件放入USER
文件夹,头文件放入CORE
文件夹。
-
把工程需要的文件添加到工程
启动代码是一段和硬件相关的汇编代码。是必不可少的!这代码主要作用如下:1、堆栈(SP)的初始化;2、初始化程序计数器(PC);3、设置向量表异常事件的入口地址;4、调用 main 函数。
这个启动文件,修改了Reset_Handler 函数,该函数修改后代码如下:; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] ;IMPORT SystemInit //寄存器代码,不需要在这里调用 SystemInit 函数, //故屏蔽掉,库函数版本代码,可以留下. //不过需要在外部实现 SystemInit 函数,否则会报错. IMPORT __main LDR R0, =0xE000ED88 // 使能浮点运算 CP10,CP11 LDR R1,[R0] ORR R1,R1,#(0xF << 20) STR R1,[R0] ;LDR R0, =SystemInit //寄存器代码,未用到,屏蔽 ;BLX R0 //寄存器代码,未用到,屏蔽 LDR R0, =__main BX R0 ENDP
这段代码,我们主要加入了开启
STM32F429
硬件FPU
的代码,以使能STM32F429
的浮点运算单元。其中,0xE000ED88
就是协处理器控制寄存器(CPACR
)的地址,该寄存器的第20~23
位用来控制是否支持浮点运算,这里我们全设置为 1,以支持浮点运算。
特别注意:我们在汇编代码里面使能了FPU
,所以在MDK
里面,我们也要设置使用FPU
,否则可能代码会无法运行,设置方法如下:选择Options for Target ‘Target1’
,打开Target
选项卡,在Code Generation
里面,选择Use Single Precision
,如图所示:
-
在
MDK
中设置把头文件存放路径
-
配置
MDK
:全局宏定义等
重要的预编译全局宏定义标识符:STM32F429xx
-
编写用户函数
新建test.c
文件,并添加到工程组中