一、STM32CubeF4 固件包下载

下载:STM32CubeF4 MCU Firmware Package

二、新建基于 HAL 库的工程模板

1、新建文件夹

建立一个文件夹为 Template。这是工程的根目录文件夹。然后为了方便我们存放工程需要的一些其他文件,这里我们还新建下面 4 个子文件夹:CORE , HALLIB, OBJ 和 USER。

2、新建工程

打开 MDK, 点击菜单 Project –>New Uvision Project

将目录定位到刚才建立的文件夹 Template 之下的 USER 子目录, 工程取名为 Template 之后点击保存, 工程文件就都保存到 USER 文件夹下面。

进入select Device ,我用的芯片是STM32F407ZG。

点击 OK, MDK 会弹出 Manage Run-Time Environment 对话框,直接点击Cancel跳过。

得到:

3、查看USER 目录:


Template.uvprojx 是工程文件,非常关键,不能轻易删除, MDK5生成的工程文件是以.uvprojx 为后缀。 DebugConfig, Listings 和 Objects 三个文件夹是 MDK 自
动生成的文件夹。其中 DebugConfig 文件夹用于存储一些调试配置文件, Listings 和 Objects 文件夹用来存储 MDK 编译过程的一些中间文件。这里,我们把 Listings 和 Objects 文件夹删除。

4、复制HAL库

STM32F4xx_HAL_Driver 下面,将目录下面的 Src,Inc 文件夹复制到我们刚才建立的 HALLIB 文件夹下面。

5、复制相关启动文件以及一些关键头文件

STM32CubeF4master\Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 拷贝startup_stm32f407xx.s复制到 CORE 目录下面。
STM32CubeF4-master\Drivers\CMSIS\Include拷贝CORE目录下面。

6、复制一些其他头文件和源文件

STM32CubeF4-master\Drivers\CMSIS\Device\ST\STM32F4xx\Include复制stm32f4xx.h、stm32f407xx.h、system_stm32f4xx.h到USER目录。

STM32CubeF4-master\Projects\STM32F4-Discovery\Templates\Src复制Inc、Src到USER目录。

7、复制 ALIENTEK 编写的 SYSTEM 文件夹

复制实验 0-1 的 SYSTEM 文件夹到工程根目录。

8、右键点击 Target1,选择 Manage Project Items

9、Project Targets

在Project Targets 一栏,我们将 Target 名字修改为 Template,然后在 Groups 一栏删掉一个 Source Group1,建立四个 Groups: USER, SYSTEM, CORE,和 HALLIB。然后点击 OK。

10、往 Group 里面添加我们需要的文件

右键点击点击 Tempate, 选择 Manage Project Items,选择HALLIB,然后点击右边的 Add Files,定位到我们刚才建立的目录\HALLIB\Src 下面,将里面所有的文件选中(Ctrl+A),然后点击 Add,然后 Close。可以看到 Files 列表下面包含我们添加的文件。



11、设置头文件存放路径

这样的格式:
…/CORE/Include;…/HALLIB/Inc;…/SYSTEM/delay;…/SYSTEM/sys;…/SYSTEM/usart;…/USER

12、添加全局宏定义标识符

进入 C/C++选项卡,然后在 Define 输入框连输入: USE_HAL_DRIVER,STM32F407xx

13、选择编译中间文件编译后存放目录

重新选择存放到目录 OBJ 目录之下。操作方法是点击魔术棒 ,然后选择“Output”选项下面的“ Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录,然后依次点击 OK 即可。

14、编译之后生成 HEX 文件

勾上“Create HEX File” 选项和 Browse Information 选项。 Create HEX File 选项选
上是要求编译之后生成 HEX 文件。 而 Browse Information 选项选上是方便我们查看工程中的一些函数变量定义等。

15、替换main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"/************************************************ALIENTEK 探索者STM32F407开发板实验0-1Template工程模板-新建工程章节使用-HAL库版本技术支持:www.openedv.com淘宝店铺: http://eboard.taobao.com 关注微信公众平台微信号:"正点原子",免费获取STM32资料。广州市星翼电子科技有限公司  作者:正点原子 @ALIENTEK
************************************************//***注意:本工程和教程中的新建工程3.3小节对应***/void Delay(__IO uint32_t nCount);void Delay(__IO uint32_t nCount)
{while(nCount--){}
}int main(void)
{GPIO_InitTypeDef GPIO_Initure;HAL_Init();                                  //初始化HAL库    Stm32_Clock_Init(336,8,2,7);                   //设置时钟,168Mhz__HAL_RCC_GPIOF_CLK_ENABLE();              //开启GPIOF时钟GPIO_Initure.Pin=GPIO_PIN_9|GPIO_PIN_10;    //PF9,10GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出GPIO_Initure.Pull=GPIO_PULLUP;           //上拉GPIO_Initure.Speed=GPIO_SPEED_HIGH;            //高速HAL_GPIO_Init(GPIOF,&GPIO_Initure);while(1){HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_SET);       //PF9置1 HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);      //PF10置1            Delay(0x7FFFFF);HAL_GPIO_WritePin(GPIOF,GPIO_PIN_9,GPIO_PIN_RESET);     //PF9置0HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); //PF10置0  Delay(0x7FFFFF);}
}

16、编译

点击
出现如下错误:
…\OBJ\Template.axf: Error: L6200E: Symbol HAL_MspDeInit multiply defined (by stm32f4xx_hal_msp_template.o and stm32f4xx_hal_msp.o).

解决方法如下:
找到左边目录,右键选择manage project items,找到对应文件,删除即可。

重新编译 OK:

同时在OBJ文件夹下生成 Template.hex文件。
到此,手动新建基于 HAL 库的工程模板 完成。

扩展:

从编译信息可以看出,我们的代码占用 FLASH 大小为:
5484 字节( 4038+478),所用的 SRAM 大小为: 1928 个字节( 1896+32)。
这里我们解释一下,编译结果里面的几个数据的意义:
Code:表示程序所占用 FLASH 的大小( FLASH)。
RO-data:即 Read Only-data, 表示程序定义的常量( FLASH)。
RW-data:即 Read Write-data, 表示已被初始化的变量( SRAM)
ZI-data:即 Zero Init-data, 表示未被初始化的变量(SRAM)

示例下载:
链接:https://pan.baidu.com/s/1zI3r76KLcF8hA1bzWOtu_g
提取码:6haz

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板相关推荐

  1. 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二)

    开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二) 下面我们做一个ZXing扫描二维码的例子,是通过安卓库的方式引用ZXing应用代码. 开发步骤 建立一个安卓工程(Project) ...

  2. stm32(库函数)——新建基于固件库的MDK5工程模板

    这里根据STM32不完全手册记录建立库函数版本的基于固件库的MDK5工程模板. 1.我们每一次新建工程都会新建一个文件夹存放所有文件. 2.点击MDK的菜单:Project->New Uvisi ...

  3. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法

    本文实例讲述了Python基于jieba库进行简单分词及词云功能实现方法.分享给大家供大家参考,具体如下: 目标: 1.导入一个文本文件 2.使用jieba对文本进行分词 3.使用wordcloud包 ...

  4. php gd库 圆形头像,基于 GD 库生成圆形头像

    基于 GD 库生成圆形头像 laravel 友好的图片处理库 Intervention Image 可以绘制圆形(circle()), 但是好像并不能将即存的图片裁剪成圆形, 这里提供一个基于 GD ...

  5. 8、合宙Air模块Luat开发:基于官方库的二次封装,使串口更加易用

    目录 点击这里查看所有博文 本系列博客,理论上适用于合宙的Air202.Air268.Air720x.Air720S以及最近发布的Air720U(我还没拿到样机,应该也能支持). 先不管支不支持,如果 ...

  6. 嵌入式 新建基于固件库的MDK5工程模板

    1. 在目录下建立一个名为Template的文件夹 2. 打开软件,new一个新的project 3. 在刚才建立的Template文件夹下建立一个USER文件夹(放代码工程文件),然后保存 4. 然 ...

  7. 《Arduino》开发 之 基于 u8g2 库 的 OLED 菜单界面

    简介: 程序思想移植于:OLED多级菜单实现方法 硬件: ESP8266: ESP8266 NODEMCU   gpio5 D1 SCL gpio4 D2 SDA 程序示例: /* @作者:刘泽文 @ ...

  8. 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

    目录 1.初识HAL库(了解) 1.1CMSIS简介 1.2HAL库简介 2.STM32Cube固件包浅析(了解) 2.1如何获取STM32Cube固件包? 2.2STM32Cube固件包文件夹简介 ...

  9. c开发 易语言支持库,易写易库-用易语言开发易语言支持库.pdf

    易写易库-用易语言开发易语言支持库 易写易库(EXEK)用户手册 版本:0.2 作者:liigo,/liigo 时间:2008.10 概述 EXEK EXEK "易写易库(EEXXEEKK) ...

最新文章

  1. 算法设计思想(4)— 分治法
  2. React后台管理系统-商品列表搜索框listSearch组件
  3. Unity应用架构设计(11)——一个网络层的构建
  4. NYOJ 586 疯牛
  5. DecimalFormat很强大
  6. SQLAlchemy 教程 —— ORM 方式使用示例
  7. maven 总结整理(二)——download source code
  8. 使用threading模块实现多线程
  9. (转)Windows7下命令行使用MySQL
  10. 5.Git使用详细教程
  11. JAVA实现成语大全-成语接龙,给小孩的应用
  12. WIN10系统下命令提示符(cmd)的基本操作
  13. C9—Qt实现网络调试助手
  14. svn执行reflash/cleanup报错wc.db解决办法
  15. linux下如何关闭端口占用,Linux端口被占用? -- Linux查看端口使用状态、关闭端口方法...
  16. 麒麟下适配mellanox网卡驱动
  17. 北方工业大学计算机复试分数线,北方工业大学2017年复试分数线
  18. 快手短视频直播间怎么提高人气热度,直播间冷启动是什么?
  19. neo4j java 模糊搜索,Neo4j 使用cypher语言进行查询
  20. Axure 如何在页面加载时,设置文本框的内容为当前日期

热门文章

  1. docker中的gosu和su-exec工具
  2. 浙江大学举办的计算机考试,关于举办计算机技术和软件工程硕士复习班的通知-硕士招生-浙江大学计算机科学与技术学院中文站...
  3. ZWAVE Notification Command Class, Version 3-8
  4. matlab pca coeff,matlab_PCA,训练集与测试集分开,原理和用法
  5. 2021年PMP退考的流程是怎样的?
  6. ML学习笔记- 神经网络
  7. 机会不平等导致下一代收入不平等,政府若不介入,社会将越来越不公平。
  8. Android 价值千万java多线程同步 lt;五CountDownLatch(计数器)和Semaphore(信号量)
  9. android 桌面插件 语录,句子控桌面小插件-句子控APPv2.5.3 安卓版_永辉资源网
  10. 认证密钥协商(Authentication key agreement)的安全目标