开发环境的搭建
1、MDK软件安装
我的版本为mdk5.14,双击该安装包,注意安装路径不要包含空格和中文,安装完成后,还没办法去开发,因为MDK5采用不同支持包来支持不同的芯片,刚开始没有相应的支持包的。所以要去安装相应平台的支持包-keil STM32F4xx_DFP 2.9.0.支持包安装完成后就可以进行F4系列芯片的开发。
2、USB串口驱动的安装
a、USB串口作用
1)、可以当串口使用。
2)、如果USB串口连接到STM32的串口1(STM32 ISP下载只能是串口1)的话,那么可以用串口来下载程序。
3)、因为要连接到USB,所以可以用来USB供电。
b、USB串口驱动芯片型号:CH340;串口下载工具:mcuisp(FlyMcu);
c、ST LINK的安装。
3、新建MDK5工程
project->New μVision Project;新建一个TEST文件,并在其中新建一个USER文件,将工程名字设为test保存在USER文件里面;
弹出的窗口,选择STMicroelectronics->STM32F4 Series->STM32F429->STM32F429ZI;在弹出的窗口,它是MDK5新增的一个功能,在这个界面可以添加自己需要的组件,从而方便构建开发环境,在这里选择取消。->目前只是建了一个框架,还需要添加启动代码以及.c等文件。启动代码的作用:a、堆栈(SP)的初始化;b、初始化程序计数器(PC);c、设置向量表异常事件的入口地址;d、调用main函数。下面修改启动文件startup_stm32f4xx.s,具体是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
不然会报错!
这段代码主要是开启了STM32F4硬件的FPU的代码,以使能STM32F4的浮点运算单元。
特别注意:我们在汇编代码里面使能FPU,所以在MDK里面也要设置使用FPU,否则代码可能会无法运行;Options for target 'Target1',打开Target选项卡,在Code Generation栏里面选择Use FPU,这样MDK编译生成的代码就可以直接使用硬件FPU了。注意设置板子的外部晶振频率。
Target1->Source Group1双击,打开startup_stm32f4xx.s,选择add,
下面去编译一下,会出错,因为没有main函数
下面把各种文件归类处理:
USER文件夹下:startup_stm32f4xx.s和test.uvproj文件等
在USER同目录下新建OBJ文件夹:用来存放这些编译过程中产生的过程文件(包括.hex文件)
由于上面还没有任何代码在工程里面,这里把系统代码复制过来(SYSTEM文件夹,该文件夹由ALIENTEK提供,寄存器版和库函数版不能混淆,可以快速构建自己的工程);如下图所示:
然后在USER目录下面去打开test.uvprojx工程文件,
在弹出的对话框中
接着新建一个文件test.c保存在USER下面,然后双击USER组,则弹出加载文件的对话框,选择test.c到USER组下。
然后对test.c进行简单的编辑
如果此时编译的话,则生成的过程文件还是会存放在USER文件夹下,所以先设置输出路径再编译。选择options for target,弹出如下对话框:在output下面选择Create HEX File。单击Select Folder for Objects,在弹出的对话框中找到OBJ文件,再单击OK。
接着设置Listings文件路径,同样单击Select Folder for Objects按钮,找到OBJ文件夹再单击OK,
这时候进入delay.c文件,可以看到红色×,表示有错误,
再次进入Options for Target,选择C/C++,选择Include Paths,把要加入的文件夹路径加入进来,如下图:
下面进行编译、连接即可!