0
点赞
收藏
分享

微信扫一扫

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板


一、STM32CubeF4 固件包下载

下载:​​STM32CubeF4 MCU Firmware Package​​

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

1、新建文件夹

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include

2、新建工程

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_02


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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_03


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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_04


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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_05


得到:

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_06

3、查看USER 目录:

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_07


Template.uvprojx 是工程文件,非常关键,不能轻易删除, MDK5生成的工程文件是以.uvprojx 为后缀。 DebugConfig, Listings 和 Objects 三个文件夹是 MDK 自

动生成的文件夹。其中 DebugConfig 文件夹用于存储一些调试配置文件, Listings 和 Objects 文件夹用来存储 MDK 编译过程的一些中间文件。这里,我们把 Listings 和 Objects 文件夹删除。

4、复制HAL库

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_08

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

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

STM32CubeF4-master\Drivers\CMSIS\Include拷贝CORE目录下面。

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_09

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目录。

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_10

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

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

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_11

9、Project Targets

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_12

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

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_13


STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_14


STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_15


STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_16

11、设置头文件存放路径

这样的格式:

…/CORE/Include;…/HALLIB/Inc;…/SYSTEM/delay;…/SYSTEM/sys;…/SYSTEM/usart;…/USER

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_17

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

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_18

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

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_19


STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_20

14、编译之后生成 HEX 文件

勾上“Create HEX File” 选项和 Browse Information 选项。 Create HEX File 选项选

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

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_21

15、替换main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"

/************************************************
ALIENTEK 探索者STM32F407开发板实验0-1
Template工程模板-新建工程章节使用-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,10
GPIO_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置0
HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET); //PF10置0
Delay(0x7FFFFF);
}
}

16、编译

点击

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_22


出现如下错误:

…\OBJ\Template.axf: Error: L6200E: Symbol HAL_MspDeInit multiply defined (by stm32f4xx_hal_msp_template.o and stm32f4xx_hal_msp.o).

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_工程文件_23


解决方法如下:

找到左边目录,右键选择manage project items,找到对应文件,删除即可。

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_24


重新编译 OK:

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_初始化_25


同时在OBJ文件夹下生成 Template.hex文件。

到此,手动新建基于 HAL 库的工程模板 完成。扩展:

STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板_#include_26


从编译信息可以看出,我们的代码占用 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


举报

相关推荐

0 条评论