【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库

目录

  • 1,新建工程前的准备工作(了解)
    • 1.1下载相关STM32Cube 官方固件包(F1/F4/F7/H7)
  • 2,新建HAL库版本MDK工程步骤(熟悉)
    • 2.1新建工程文件夹
      • 2.1.1Drivers文件夹
      • 2.1.2Middlewares文件夹
      • 2.1.3Output文件夹
      • 2.1.4Projects文件夹
      • 2.1.5User文件夹
    • 2.2新建一个工程框架
      • 2.2.1新建工程
      • 2.2.2保存工程
      • 2.2.3选择主控型号
      • 2.2.4删除文件夹
    • 2.3添加文件
      • 2.3.1设置工程名和分组名
      • 2.3.2添加启动文件
      • 2.3.3添加User源码
      • 2.3.4添加SYSTEM源码
      • 2.3.5添加STM32F1xx_HAL_Driver 源码
    • 2.4魔术棒设置
      • 2.4.1Target 选项卡
      • 2.4.2Output 选项卡
      • 2.4.3Listing 选项卡
      • 2.4.4C/C++ 选项卡
      • 2.4.5Debug 选项卡
      • 2.4.6Utilities 选项卡
      • 2.4.7Linker 选项卡(可选)
    • 2.5添加 main.c,并编写代码
  • 3,下载验证(了解)
  • 4,总结(了解)

1,新建工程前的准备工作(了解)

1.1下载相关STM32Cube 官方固件包(F1/F4/F7/H7)

  之前文章中已经总结如何下载,具体查看【07】STM32·HAL库开发-新建寄存器版本MDK工程 |下载STM32Cube固件包 | 新建MDK工程步骤中的第1.1小节。

2,新建HAL库版本MDK工程步骤(熟悉)

  新建HAL库版本MDK工程简要步骤:
1.新建工程文件夹:D/M/O/P/U文件夹,5个文件夹;
2.新建工程框架:工程命名,选芯片;
3.添加文件:建分组,添加.s、.c;
4.魔术棒设置:T/O/L/C/D/U,6个选项卡;
5.添加main.c:编写自己的代码。

2.1新建工程文件夹

  在桌面新建一个工程根目录文件夹,并在该文件夹里新建D/M/O/P/U文件夹。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第1张图片

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第2张图片

2.1.1Drivers文件夹

  在【Drivers】文件夹中新建【BSP】文件夹,由于只是创建新工程此处为空文件夹,有外设时可根据外设添加此文件夹代码;【CMSIS】文件夹,直接复制正点原子资料A盘->8.STM32参考资料->1,STM32CubeF1固件包->精简版CMSIS中的【CMSIS】文件夹,如果想知道保留了哪些文件,可以查看文章【07】STM32·HAL库开发-新建寄存器版本MDK工程 |下载STM32Cube固件包 | 新建MDK工程步骤中的章节2.1.1;【SYSTEM】文件夹随意拷贝正点原子F1系列工程中的【SYSTEM】文件夹;
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第3张图片
  【STM32F1xx_HAL_Driver】文件夹直接拷贝HAL固件库文件夹中的【STM32F1xx_HAL_Driver】文件夹,并删除除了【Inc】和【Src】文件夹以外的其他文件。
在这里插入图片描述

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第4张图片

2.1.2Middlewares文件夹

  【Middlewares】文件夹文件夹用于存放正点原子和其他第三方提供的中间层代码(组件/Lib 等),如: USMART、MALLOC、 TEXT、 FATFS、 USB、 LWIP、各种 OS、各种 GUI 等。目前不用操作。

2.1.3Output文件夹

  该文件夹用于存放编译器编译工程输出的中间文件,比如: .hex、 .bin、 .o 文件等。目前不用操作。

2.1.4Projects文件夹

  该文件夹用于存放编译器(MDK、 IAR 等)工程文件,我们主要用 MDK,为了方便区分,我们在该文件夹下新建: MDK-ARM 文件夹,用于存放 MDK 的工程文件。在该文件夹下创建【MDK-ARM】文件夹。
在这里插入图片描述

2.1.5User文件夹

  该文件夹用于存放用户编写的代码,如: HAL 库用户配置文件、 main.c 文件、中断处理文件,以及分散加载文件等。main.c文件在创建工程时创建,其他文件从HAL库固件包中复制,如0下所示:

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第5张图片
  从以下目录中获取stm32f1xx_hal_conf.h(此文件也可以从STM32Cube_FW_F1_V1.8.0\Drivers\STM32F1xx_HAL_Driver\Inc中获取,将文件stm32f1xx_hal_conf_template.h文件名改为stm32f1xx_hal_conf.h即可)和stm32f1xx_it.h文件。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第6张图片
  从以下目录中获取stm32f1xx_it.c文件。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第7张图片

2.2新建一个工程框架

2.2.1新建工程

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第8张图片
  将工程保存到【MDK-ARM】文件夹中,并自由命名,这里我命名为“f103”。选择自己开发板对应的芯片,这里以STM32RCT6为例。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第9张图片
  在以下界面选择Cancel即可。

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第10张图片

2.2.2保存工程

2.2.3选择主控型号

2.2.4删除文件夹

  生产工程后,自动生成以下三个文件夹,【DebugConfig】文件夹不能删除,此文件中保存调试的设置信息,如果删除在调试时会发生错误。删除【Listings】和【Objects】文件夹,因为编译产生的中间层文件会在MDK软件中设置输出到【Output】文件夹。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第11张图片
  删除后的【MDK-ARM】如下所示:
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第12张图片

2.3添加文件

2.3.1设置工程名和分组名

  工程名:Template
  分组名:Startup,User,Drivers/SYSTEM,Drivers/STM32F1xx_HAL_Driver ,Readme
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第13张图片
  最终设置工程名和分组名如下所示:
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第14张图片

2.3.2添加启动文件

  在设置工程名和分组名界面,找到【Add Files】添加【Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm】文件夹中的启动文件。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第15张图片

2.3.3添加User源码

  在【User】分组中添加【User】文件夹中的stm32f1xx_it.c和【Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates】的system_stm32f1xx.c文件。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第16张图片

2.3.4添加SYSTEM源码

  添加【Drivers\SYSTEM】文件夹中,各自文件夹的.c文件。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第17张图片

2.3.5添加STM32F1xx_HAL_Driver 源码

  新建工程时对HAL库进行裁剪,根据需要进行保留,新建工程最终保留如下所示:
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第18张图片
  点击【OK】,工程右侧最终如下图所示。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第19张图片
  其中有“小钥匙”符号的原因是官方的固件包设置的是只读模式,取消只读权限即可让其消失。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第20张图片

2.4魔术棒设置

2.4.1Target 选项卡

  设置外部晶振频率。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第21张图片

2.4.2Output 选项卡

  设置Objects输出文件夹、生成.hex文件(勾选【Creat HEX File】)、输出浏览信息。勾选【Browse Information】可以在程序中使用Goto definition,如果不勾选,编译速度会变快。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第22张图片

2.4.3Listing 选项卡

  设置Listing输出文件夹。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第23张图片

2.4.4C/C++ 选项卡

  设置全局宏定义(表示使用了HAL库驱动,USE_HAL_DRIVER和STM32F103xE之间用英文逗号隔开。)、优化等级(不用修改,默认为Level 0)、勾选【C99 Mode】、设置头文件包含路径。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第24张图片

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第25张图片
  定义USE_HAL_DRIVERSTM32F103xE这两个宏的原因是在stm32f1xx.h中,需要定义了宏USE_HAL_DRIVER才可以使用HAL库,可以在stm32f1xx.h文件中定义,也可以在MDK中进行全局宏定义。定义宏STM32F103xE也是在stm32f1xx.h存在条件编译,头文件中描述了FLASH、SRAM、外设基地址的信息,如果要开发此系列,必须定义该宏。

#if defined (USE_HAL_DRIVER)
 #include "stm32f1xx_hal.h"
#endif /* USE_HAL_DRIVER */


#if defined(STM32F100xB)
  #include "stm32f100xb.h"
#elif defined(STM32F100xE)
  #include "stm32f100xe.h"
...

2.4.5Debug 选项卡

  设置使用的仿真器类型、选择的下载接口等。这里以ST-Link下载方式为例,选择SWD方式,时钟选择最大即可。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第26张图片

2.4.6Utilities 选项卡

  设置下载功能、下载算法、下载算法起始地址和大小等。勾选【Reset and Run】程序复位后自动执行,【Erase Full Chip】是擦除全片,【Erase Sectors】是擦除部分,【Do not Erase】是不进行擦除,其余默认即可。
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第27张图片

2.4.7Linker 选项卡(可选)

  添加分散加载文件(北极星/MiniPro H750,需要用外部的FLASH存储代码)。具体参考【07】STM32·HAL库开发-新建寄存器版本MDK工程 |下载STM32Cube固件包 | 新建MDK工程步骤中的2.4.7小节。

2.5添加 main.c,并编写代码

  点击新建文件图标,或者Ctrl+N新建文件,Ctrl+S保存到【User】文件夹,命名为main.c,并添加到工程分组【User】中。
在这里插入图片描述
【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第28张图片

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

void led_init(void);                       /* LED初始化函数声明 */

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    delay_init(72);                     /* 延时初始化 */
    led_init();                         /* LED初始化 */
    while(1)
    { 
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);    /* PB5置1 */ 
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);  /* PE5置0 */ 
        delay_ms(500);
        HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);  /* PB5置0 */
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET);    /* PE5置1 */
        delay_ms(500); 
    }
}

/**
 * @brief       初始化LED相关IO口, 并使能时钟
 * @param       无
 * @retval      无
 */
void led_init(void)
{
    GPIO_InitTypeDef gpio_initstruct;
    __HAL_RCC_GPIOD_CLK_ENABLE();                          /* IO口PB时钟使能 */
    __HAL_RCC_GPIOA_CLK_ENABLE();                          /* IO口PE时钟使能 */

    gpio_initstruct.Pin = GPIO_PIN_2;                      /* LED0引脚 */
    gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;            /* 推挽输出 */
    gpio_initstruct.Pull = GPIO_PULLUP;                    /* 上拉 */
    gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;          /* 高速 */
    HAL_GPIO_Init(GPIOD, &gpio_initstruct);                /* 初始化LED0引脚 */

    gpio_initstruct.Pin = GPIO_PIN_8;                      /* LED1引脚 */
    HAL_GPIO_Init(GPIOA, &gpio_initstruct);                /* 初始化LED1引脚 */
}

  拷贝以上程序到main.c中(led_init函数中需要根据自己板子LED引脚进行设置),编译工程会报以下错误,双击此错误,跳转到报错位置,删除#include "main.h"

..\..\User\stm32f1xx_it.c(23): error:  #5: cannot open source input file "main.h": No such file or directory

  再次编译会出现以下警告,说明HAL_IncTick未声明,在stm32f1xx_it.c中包含stm32f1xx_hal.h头文件即可0错误,0警告。

..\..\User\stm32f1xx_it.c(140): warning:  #223-D: function "HAL_IncTick" declared implicitly

3,下载验证(了解)

  将程序下载到板子中,可以看到LED灯交替闪烁。

4,总结(了解)

【09】STM32·HAL库-新建HAL库版本MDK工程 | 下载STM32固件库_第29张图片

你可能感兴趣的:(#,STM32-HAL库,stm32,嵌入式硬件,单片机,HAL库,嵌入式)