STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板
Posted 聚优致成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于STM32F4 HAL库开发 -- 新建基于 HAL 库的工程模板的主要内容,如果未能解决你的问题,请参考以下文章