查看: 1266|回复: 0

搭建STM32-NUCLEO-KEIL-MDK工程模板

[复制链接]
  • TA的每日心情
    开心
    2018-9-18 06:28
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-12-6 22:33:01 | 显示全部楼层 |阅读模式
    分享到:
    搭建好一个IDE开发平台后,我们就可以进行编程实践了。ST提供了众多的固件库文件和第三方软件包来支持NCULEO开发平台,非常方便我们调用其中已封装好的函数文件,但也存在一个大问题,那就是调用的固件库和程序包来自四面八方,如果不经整理就直接调用,工程文件的移植性不强。举例说明,如果A和B合作开发一个项目,A做了很多代码,并调用了很多库文件和第三方驱动包,A将工程文件发给B后,除非在B的电脑上有相同的文件夹和路径,否则B拿到的工程文件是无法直接编译和运行的,这样的结果经常会导致交流效率低下,开发进度受影响。为了杜绝这种情况的出现,必须修改ST库文件代码的位置和路径,使得所用到的必备库文件和第三方插件都封闭在一个大文件内,实现了对文件的相对寻址。这样,将工程文件发给任何人,别人都可以轻易地在不修改工程路径的情况下顺利编译和下载。这个就是建立一个工程模板的必要性,这一篇文章讲一下如何建立基于STM32-NUCLEO-F072RB的KEIL-MDK工程模板。
    一、工程文件模板作用
    首先,说明说一下建立工程模块的好处,也就是它的作用,主要有两个亮点:
    1、便于程序代码模块化,封装化
    2、便于多人合作分工开发STM32项目
    二、工程文件模板的制作步骤

    1、建立项目文件夹
    首先,要建立一个大的文件夹,里面再放置小文件夹,每个小文件夹放置不同的ST提供的库源文件或者自己编写的驱动文件等,在覆盖全部官网文件外,也使得自己的编程代码模块化管理,不再是以前那种一个main.c 文件打天下的局面。

    下面是每个子文件夹的说明
    •Driver: 存放自己编写的驱动
    •Lib:ST提供的固件库
    •Mdk: 存放工程文件名/编译后产生的文件
    •Startup: 存放启动文件(.s)
    •Stm32f072rbt6:放置宏定义文件和MCU寄存器配置
    •User:放置主程序/包含预处理文件
    •Clean.bat :批处理文件,用于清理编译后产生的不用文件
    •程序说明.txt 对程序改动进行说明
    2、移植官网提供的固件库软件包
    ST官网针对每个系列MCU提供了非常完备的底层硬件驱动库,这些库文件以.C和.H文件形式提供。里面是些对寄存器内容的封装函数,编程时直接调用即可。库文件针对不同的外设模块进行了区分,非常容易分模块学习。


    3、移植官网提供的宏定义文件
    这些宏定义文件包括MCU寄存器定义文件/时钟配置文件/开发板宏定义配置文件/中断配置文件/启动文件等内容。下面是文件内容截图,文件全部来源于STM32-072DISCOVERY和STM32_NUCLEO_FW_1.2.1两个固件包内(这样不必每次都要加载两个大容量的固件包)

    4、建立MDK工程文件,在里面设置好工作路径及其他配置
    整理好文件夹内容,接下来就开始建立一个KEIL-MDK工程文件,再向里面增加工作组目录,然后将开发所必要的文件加载进去。这里要涉及a、建立工程 b、设置正确的器件型号c、建立工作组d、设置工作路径e、设置仿真器5个小内容。
    建立工程和选择器件型号这个比较简单,下面看一下在工程文件内设置好的工作组

    这里建立startup/lib/dirver/user几个工作组,将库文件全部加载,如果不想每次都编译,可以做成.lib文件的形式,新手不推荐这样做。User工作组里面放置main.c和system_stm32f0xx.c和stm32f0xx.c文件,这两个一个是时钟配置文件,一个是中断文件。主函数里面第一个语句可以是调用systemInit();这个在启动文件里面已经调用,可以忽略。

    器件型号一定要选择对,否则不能下载,还有时钟要修改为8MHZ才行,默认工程是12MHZ。设置不对也不能下载。

    在输出选项里面,勾选hex文件输出。在某些情况下,可以采用ISP方式下载,而不用仿真。

    在KEIL-MDK中,重要的地方在【C/C++】这个地方,一个是预处理要设置正确,方便再不同的MCU平台间移植,这里除了基本的预定义: USB_STDPERIPH_DRIVERS外,还要增加STM32F072这个,这里的宏定义内容看stm32f0xx.h文件。第二是优化选项。这里有几个优化级别,设置为默认就可以,设置为level3时,代码优化量最大。这里设置不当,容易引起STM32的MCU出现 hardfaulter错误。第三个是设置工程路径,把加载进来的文件的工作路径都设置到上面,没有设置好,容易出现编译报错,提示找不到文件,不能下载。

    加载路径的方法很简单,关键能不能要想到去加载!

    设置仿真器就不用说了,仿真器识别不懂器件内核,就不能下载,重新上电或者重启MDK就可以。

    保证自己建立的MDK工程模板能够编译通过,有错误就无法下载运行。

    出现这样的界面,代表大功告成!
    这样建立好的一个工程模板压缩包仅几百K左右,非常方便传递和交流。那些没有采用模板的开发,加载原始固件包的文件通常压缩包都在几十M左右,传输起来都麻烦。
    摩尔吧视频地址链接
    https://www.moore8.com/courses/306
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-18 18:11 , Processed in 0.120242 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.