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

一、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-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、编译

点击在这里插入图片描述
出现如下错误:
…\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

针对于stm32f4xx芯片开发使用的hal版本 /** ****************************************************************************** * @file stm32f4xx_hal.h * @author MCD Application Team * @version V1.4.2 * @date 10-November-2015 * @brief This file contains all the functions prototypes for the HAL * module driver. ****************************************************************************** * @attention * * © COPYRIGHT(c) 2015 STMicroelectronics * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** */
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聚优致成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值