您当前的位置: 首页 >  stm32

正点原子

暂无认证

  • 0浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子STM32连载】第六章 新建寄存器版本MDK工程 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

正点原子 发布时间:2022-08-05 14:51:28 ,浏览量:0

1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-336836-1-1.html 4)对正点原子STM32感兴趣的同学可以加群讨论:879133275

第六章 新建寄存器版本MDK工程

通过前面几章的学习,我们对STM32有了个比较清晰的了解,本章我们将讲解新建寄存器库版本MDK工程的详细步骤。我们把本章新建好的工程放在光盘里,路径:4,程序源码\2,标准例程-HAL库版本\实验0 基础入门实验\实验0-2,新建工程实验-寄存器版本,大家在学习新建工程过程中间遇到一些问题,可以直接打开这个工程,然后对比学习。 本章将分为如下两个小节: 6.1 新建寄存器版本MDK工程 6.2 下载验证

6.1 新建寄存器版本MDK工程

本节我们将教大家如何新建一个STM32H750的MDK5工程。为了方便大家参考,我们将本节最终新建好的工程模板存放在A盘:4、程序源码\2,标准例程-HAL库版本\实验0 基础入门实验\实验0-2,新建工程实验-寄存器版本,如遇新建工程问题,请打开该实验对比。 整个新建过程比较复杂,我们将其拆分为5个步骤进行讲解,请准备大概2个小时时间,耐心细致的做完!对你后续的学习非常有帮助! 在新建工程之前,首先我们要做如下准备: 1、 STM32Cube官方固件包:我们使用的固件包版本是STM32Cube_FW_H7_V1.6.0,固件包路径:A盘8,STM32参考资料1,STM32CubeH7固件包。 2、开发环境搭建:参考本书第三章相关内容。 6.1.1 新建工程文件夹 新建工程文件夹分为2个步骤:1,新建工程文件夹;2,拷贝工程相关文件。

  1. 新建工程文件夹 首先我们在桌面新建一个工程根目录文件夹,后续的工程文件都将在这个文件夹里建立,我们把这个文件夹重命名为:实验0-2,新建工程实验-寄存器版本。如图6.1.1.1所示: 在这里插入图片描述

图6.1.1.1 新建工程根目录文件夹 为了让工程的文件目录结构更加清晰易懂,我们会在工程根目录文件夹下建立以下几个文件夹,每个文件夹名称及其作用如表6.1.1.1所示: 在这里插入图片描述

表6.1.1.1 工程根目录新建文件夹及其作用 新建完成以后,最后得到我们的工程根目录文件夹如图6.1.1.2所示。 在这里插入图片描述

图6.1.1.2 工程根目录文件夹 工程根目录及其相关文件夹新建好以后,我们需要拷贝一些工程相关文件过来(主要是在Drivers文件夹里面),以便等下的新建工程需要。

2. 拷贝工程相关文件

接下来,我们按图6.1.1.2的根目录文件夹顺序介绍每个文件夹及其需要拷贝的文件。 Drivers文件夹 该文件夹用于存放与硬件相关的驱动层文件,一般包括如表6.1.1.2所示的三个文件夹: 在这里插入图片描述

表6.1.1.2 Drivers包含文件夹 BSP文件夹,用于存放正点原子提供的板级支持包驱动代码,如:LED、蜂鸣器、按键等。本章我们暂时用不到该文件夹,不过可以先建好备用。 CMSIS文件夹,用于存放CMSIS底层代码(ARM和ST提供),如:启动文件(.s文件)、stm32h7xx.h等各种头文件。该文件夹我们可以直接从STM32CubeH7固件包(路径:A盘8,STM32参考资料1,STM32CubeH7固件包)里面拷贝,不过由于固件包里面的CMISIS兼容了太多芯片,导致非常大(300多MB),因此我们根据实际情况,对其进行了大幅精简,精简后的CMSIS文件夹大小为2.3MB左右。精简后的CMSIS文件夹大家可以在:A盘4,程序源码1,标准例程-寄存器版本 文件夹里面的任何一个实验的Drivers文件夹里面拷贝过来。 SYSTEM文件夹,用于存放正点原子提供的系统级核心驱动代码,如:sys.c、delay.c和usart.c等,方便大家快速搭建自己的工程。该文件同样可以从:A盘4,程序源码1,标准例程-寄存器版本 文件夹里面的任何一个实验的Drivers文件夹里面拷贝过来。 执行完以上操作后,Drivers文件夹最终结构如图6.1.1.3所示: 在这里插入图片描述

图6.1.1.3 工程根目录文件夹 Middlewares文件夹 该文件夹用于存放正点原子和其他第三方提供的中间层代码(组件/Lib等),如:USMART、MALLOC、TEXT、FATFS、USB、LWIP、各种OS、各种GUI等等。本章我们暂时用不到该文件夹,不过可以先建好备用,后面的实验将会陆续添加各种文件。 Output文件夹 该文件夹用于存放编译器编译工程输出的中间文件,比如:.hex、.bin、.o文件等等。这里不需要操作,后面只需要在MDK里面设置该文件夹为编译过程中间文件的存放文件夹就行。 Projects文件夹 该文件夹用于存放编译器(MDK、IAR等)工程文件,我们主要用MDK,为了方便区分,我们在该文件夹下新建:MDK-ARM文件夹,用于存放MDK的工程文件,如图6.1.1.4所示: 在这里插入图片描述

图6.1.1.4 在Projects文件夹下新建MDK-ARM文件夹 User文件夹 该文件夹用于存放用户编写的代码,如:main.c等。目前还没有任何代码,所以暂时为空即可。

6.1.2 新建一个工程框架

首先,打开MDK软件。然后点击ProjectNew uVision Project如图6.1.2.1所示: 在这里插入图片描述

图6.1.2.1 新建MDK工程 然后弹出工程命名和保存的操作窗口,我们将工程文件保存路径设置在上一节新建的工程文件夹内,具体路径为:桌面实验0-2,新建工程实验-寄存器版本ProjectsMDK-ARM,工程名字我们取:atk_h750,最后点击保存即可。具体操作窗口如图6.1.2.2所示: 在这里插入图片描述

图6.1.2.2 保存工程界面 之后,弹出器件选择对话框,如图6.1.2.3所示。因为正点原子MiniPRO STM32H750开发板所使用的STM32型号为STM32H750VBT6,所以我们选择:STMicroelectronicsSTM32H7 SeriesSTM32H750STM32H750VBTx(如果使用的是其他系列的芯片,选择相应的型号就可以了,特别注意:一定要安装对应的器件pack才会显示这些内容哦!!如果没得选择,请关闭MDK,然后安装 A盘:6,软件资料\1,软件\MDK5\ Keil.STM32H7xx_DFP.2.5.0.pack这个安装包后重试)。 在这里插入图片描述

                       图6.1.2.3 器件选择界面

点击OK,MDK会弹出Manage Run-Time Environment对话框,如图6.1.2.4所示: 在这里插入图片描述

图3.2.1.4 Manage Run-Time Environment界面 这是MDK5新增的一个功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境,不过这里我们不做介绍。所以在图6.1.2.4所示界面,我们直接点击Cancel,即可,得到如图6.1.2.5所示界面: 在这里插入图片描述

图6.1.2.5 工程初步建立 此时,我们打开MDK-ARM文件夹,会看到MDK在该文件夹下自动创建了3个文件夹(DebugConfig、Listings和Objects),如图6.1.2.6所示: 在这里插入图片描述

图6.1.2.6 MDK新建工程时自动创建的文件夹 这三个文件夹的作用如表6.1.2.1所示: 在这里插入图片描述

表6.1.2.1 三个文件夹及其作用 编译过程产生的链接列表、调试信息、预览、lib等文件,统称为中间文件。为了统一管理,方便使用,我们会把输出在Listings和Objects文件夹的内容,统一改为输出到Output文件夹(通过魔术棒设置),我们先把MDK自动生成的这两个文件夹(Listings和Objects)删除。 至此,我们还只是建了一个框架,还有好几个步骤要做,比如添加文件、魔术棒设置、编写main.c等。

6.1.3 添加文件
本节将分3个步骤:1,设置工程名和分组名;2,添加启动文件;3,添加SYSTEM源码。

1. 设置工程名和分组名 在ProjectTarget上右键,选择Manage Project Items…(方法一)或在菜单栏点击品字形红绿白图标(方法二)进入工程管理界面,如图6.1.3.1所示: 在这里插入图片描述

图6.1.3.1 进入工程管理界面 在工程管理界面,我们可以执行设置工程名字(Project Targets)、分组名字(Groups)以及添加每个分组的文件(Files)等操作。我们设置工程名字为:Template,并设置四个分组:Startup(存放启动文件)、User(存放main.c等用户代码)、Drivers/SYSTEM(存放系统级驱动代码)、Readme(存放工程说明文件),如图6.1.3.2所示: 在这里插入图片描述

图6.1.3.2 设置工程名和分组名 设置好之后,我们点击OK,回到MDK主界面,可以看到我们设置的工程名和分组名如图6.1.3.3所示: 在这里插入图片描述

图6.1.3.3 设置成功 这里我们只是新建了一个简单的工程,并没有添加BSP、Middlewares等分组,后面随着工程复杂程度的增加,我们需要一步步添加对应的分组。 注意:为了让工程结构清晰,我们会尽量让MDK的工程分组和我们前面新建的工程文件夹对应起来,由于MDK分组不支持多级目录,因此我们将路径也带入分组命名里面,以便区分。如:User分组对应User文件夹里面的源码,Drivers/SYSTEM分组,对应Drivers/SYSTEM文件夹里面的源码,Drivers/BSP分组对应Drivers/BSP文件夹里面的源码等。

2. 添加启动文件

启动文件(.s文件)包含STM32的启动代码,其主要作用包括:1、堆栈(SP)的初始化;2、初始化程序计数器(PC);3、设置向量表异常事件的入口地址;4、调用main函数等,是每个工程必不可少的一个文件,我们在本书第九章会有详细介绍。 启动文件由ST官方提供,存放在STM32CubeH7软件包的:DriversCMSISDevice STSTM32H7xxSourceTemplatesarm文件夹下。因为我们开发板使用的是STM32H750VBT6,对应的启动文件为:startup_stm32h750xx.s,为了节省空间,在精简版CMSIS文件夹里面我们把其他启动文件都删了。而且,为了更好的匹配寄存器版本代码,我们对startup_stm32h750xx.s做了2处修改: 1,我们用不到编译器的内存管理函数,为节省内存,将Heap_Size改成 0,源码如下: ;未用到编译器自带的内存管理(malloc,free等),设置Heap_Szie为0 Heap_Size EQU 0x00000000 2,寄存器代码不需要调用SystemInit函数,因此修改Reset_Handler函数,去掉SystemInit调用,并且还加入了开启 STM32H750 硬件 FPU 的代码,具体源码如下:

Reset_Handler    PROC
                    EXPORT  Reset_Handler                    [WEAK] 
    ;IMPORT  SystemInit
    ;寄存器代码,不需要在这里调用SystemInit函数,故屏蔽掉,库函数版本代码,可以留下
    ;不过需要在外部实现SystemInit函数,否则会报错.
    IMPORT  __main

        IF {FPU} != "SoftVFP"  ;通过Target选项卡的Floating Point Hardware选项来控制
                                   ;如果选择:Not Used,则不编译以下代码(到ENDIF结束)
                                   ;如果选择:Use Single/Double Precision,则编译以下代码
        ;Enable Floating Point Support at reset for FPU
        LDR.W  R0, =0xE000ED88       ; Load address of CPACR register
        LDR    R1, [R0]                ; Read value at CPACR
; Set bits 20-23 to enable CP10 and CP11 coprocessors
        ORR    R1,  R1, #(0xF             
关注
打赏
1665308814
查看更多评论
0.0392s