基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》

下载HAL库Cube文件包《STM32Cube_FW_H7_V1.9.0》
文件可以在ST官网下载,也可以从CubeMX中获取,具体下载方法自行解决。
下载后打开文件夹得到如下内容:
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
这个文件具体有哪些内容就不一一分析了,我们只用关心裸机工程需要用到哪些文件就好。
配置一个H7裸机工程需要Drivers中的部分内容:
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
BSP是官方给的案例,我们自己配置工程的话需要用到的是CMSIS和STM32H7xx_HAL_Driver两个文件夹的内容,在电脑上新建一个工程文件夹命名为:STM32H743XIH6_001并在该文件夹下创建如下文件夹:
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
红色框里的两个文件夹从库包中直接拷贝,其他三个文件夹自己创建
Keil_Project文件夹用来放置Keil工程文件
User用来放置main文件和Config配置文件
CMSIS和STM32H7xx_HAL_Driver两个文件夹中的中间有些是用不到的需要删除,最终留下的文件如下所示,其余的先删除,后边用到了再从库文件中拷贝,在删除的过程中,不要修改文件的目录结构,只是把不需要的文件和文件夹删除就可以了

├─Bsp
│      bsp_led.c
│      bsp_led.h
│      bsp_uart.c
│      bsp_uart.h
│      
├─CMSIS
│  ├─Core
│  │  └─Include
│  │          cmsis_armcc.h
│  │          cmsis_armclang.h
│  │          cmsis_armclang_ltm.h
│  │          cmsis_compiler.h
│  │          cmsis_gcc.h
│  │          cmsis_iccarm.h
│  │          cmsis_version.h
│  │          core_armv81mml.h
│  │          core_armv8mbl.h
│  │          core_armv8mml.h
│  │          core_cm0.h
│  │          core_cm0plus.h
│  │          core_cm1.h
│  │          core_cm23.h
│  │          core_cm3.h
│  │          core_cm33.h
│  │          core_cm35p.h
│  │          core_cm4.h
│  │          core_cm7.h
│  │          core_sc000.h
│  │          core_sc300.h
│  │          mpu_armv7.h
│  │          mpu_armv8.h
│  │          tz_context.h
│  │          
│  └─Device
│      └─ST
│          └─STM32H7xx
│              ├─Include
│              │      stm32h723xx.h
│              │      stm32h725xx.h
│              │      stm32h730xx.h
│              │      stm32h730xxq.h
│              │      stm32h733xx.h
│              │      stm32h735xx.h
│              │      stm32h742xx.h
│              │      stm32h743xx.h
│              │      stm32h745xx.h
│              │      stm32h747xx.h
│              │      stm32h750xx.h
│              │      stm32h753xx.h
│              │      stm32h755xx.h
│              │      stm32h757xx.h
│              │      stm32h7a3xx.h
│              │      stm32h7a3xxq.h
│              │      stm32h7b0xx.h
│              │      stm32h7b0xxq.h
│              │      stm32h7b3xx.h
│              │      stm32h7b3xxq.h
│              │      stm32h7xx.h
│              │      system_stm32h7xx.h
│              │      
│              └─Source
│                  └─Templates
│                      │  system_stm32h7xx.c
│                      │  
│                      └─arm
│                              startup_stm32h723xx.s
│                              startup_stm32h725xx.s
│                              startup_stm32h730xx.s
│                              startup_stm32h730xxq.s
│                              startup_stm32h733xx.s
│                              startup_stm32h735xx.s
│                              startup_stm32h742xx.s
│                              startup_stm32h743xx.s
│                              startup_stm32h745xx.s
│                              startup_stm32h747xx.s
│                              startup_stm32h750xx.s
│                              startup_stm32h753xx.s
│                              startup_stm32h755xx.s
│                              startup_stm32h757xx.s
│                              startup_stm32h7a3xx.s
│                              startup_stm32h7a3xxq.s
│                              startup_stm32h7b0xx.s
│                              startup_stm32h7b0xxq.s
│                              startup_stm32h7b3xx.s
│                              startup_stm32h7b3xxq.s
│                              
├─Keil_Project
│  │  STM32H743XIH6.uvguix.GUY
│  │  STM32H743XIH6.uvoptx
│  │  STM32H743XIH6.uvprojx
│  │  
│  ├─DebugConfig
│  │      Target_1_STM32H743XIHx_1.1.0.dbgconf
│  │      
│  ├─Listings
│  └─Objects
├─STM32H7xx_HAL_Driver
│  ├─Inc
│  │  │  stm32h7xx_hal.h
│  │  │  stm32h7xx_hal_adc.h
│  │  │  stm32h7xx_hal_adc_ex.h
│  │  │  stm32h7xx_hal_cec.h
│  │  │  stm32h7xx_hal_comp.h
│  │  │  stm32h7xx_hal_conf_template.h
│  │  │  stm32h7xx_hal_cordic.h
│  │  │  stm32h7xx_hal_cortex.h
│  │  │  stm32h7xx_hal_crc.h
│  │  │  stm32h7xx_hal_crc_ex.h
│  │  │  stm32h7xx_hal_cryp.h
│  │  │  stm32h7xx_hal_cryp_ex.h
│  │  │  stm32h7xx_hal_dac.h
│  │  │  stm32h7xx_hal_dac_ex.h
│  │  │  stm32h7xx_hal_dcmi.h
│  │  │  stm32h7xx_hal_def.h
│  │  │  stm32h7xx_hal_dfsdm.h
│  │  │  stm32h7xx_hal_dfsdm_ex.h
│  │  │  stm32h7xx_hal_dma.h
│  │  │  stm32h7xx_hal_dma2d.h
│  │  │  stm32h7xx_hal_dma_ex.h
│  │  │  stm32h7xx_hal_dsi.h
│  │  │  stm32h7xx_hal_dts.h
│  │  │  stm32h7xx_hal_eth.h
│  │  │  stm32h7xx_hal_eth_ex.h
│  │  │  stm32h7xx_hal_exti.h
│  │  │  stm32h7xx_hal_fdcan.h
│  │  │  stm32h7xx_hal_flash.h
│  │  │  stm32h7xx_hal_flash_ex.h
│  │  │  stm32h7xx_hal_fmac.h
│  │  │  stm32h7xx_hal_gfxmmu.h
│  │  │  stm32h7xx_hal_gpio.h
│  │  │  stm32h7xx_hal_gpio_ex.h
│  │  │  stm32h7xx_hal_hash.h
│  │  │  stm32h7xx_hal_hash_ex.h
│  │  │  stm32h7xx_hal_hcd.h
│  │  │  stm32h7xx_hal_hrtim.h
│  │  │  stm32h7xx_hal_hsem.h
│  │  │  stm32h7xx_hal_i2c.h
│  │  │  stm32h7xx_hal_i2c_ex.h
│  │  │  stm32h7xx_hal_i2s.h
│  │  │  stm32h7xx_hal_i2s_ex.h
│  │  │  stm32h7xx_hal_irda.h
│  │  │  stm32h7xx_hal_irda_ex.h
│  │  │  stm32h7xx_hal_iwdg.h
│  │  │  stm32h7xx_hal_jpeg.h
│  │  │  stm32h7xx_hal_lptim.h
│  │  │  stm32h7xx_hal_ltdc.h
│  │  │  stm32h7xx_hal_ltdc_ex.h
│  │  │  stm32h7xx_hal_mdios.h
│  │  │  stm32h7xx_hal_mdma.h
│  │  │  stm32h7xx_hal_mmc.h
│  │  │  stm32h7xx_hal_mmc_ex.h
│  │  │  stm32h7xx_hal_nand.h
│  │  │  stm32h7xx_hal_nor.h
│  │  │  stm32h7xx_hal_opamp.h
│  │  │  stm32h7xx_hal_opamp_ex.h
│  │  │  stm32h7xx_hal_ospi.h
│  │  │  stm32h7xx_hal_otfdec.h
│  │  │  stm32h7xx_hal_pcd.h
│  │  │  stm32h7xx_hal_pcd_ex.h
│  │  │  stm32h7xx_hal_pssi.h
│  │  │  stm32h7xx_hal_pwr.h
│  │  │  stm32h7xx_hal_pwr_ex.h
│  │  │  stm32h7xx_hal_qspi.h
│  │  │  stm32h7xx_hal_ramecc.h
│  │  │  stm32h7xx_hal_rcc.h
│  │  │  stm32h7xx_hal_rcc_ex.h
│  │  │  stm32h7xx_hal_rng.h
│  │  │  stm32h7xx_hal_rng_ex.h
│  │  │  stm32h7xx_hal_rtc.h
│  │  │  stm32h7xx_hal_rtc_ex.h
│  │  │  stm32h7xx_hal_sai.h
│  │  │  stm32h7xx_hal_sai_ex.h
│  │  │  stm32h7xx_hal_sd.h
│  │  │  stm32h7xx_hal_sdram.h
│  │  │  stm32h7xx_hal_sd_ex.h
│  │  │  stm32h7xx_hal_smartcard.h
│  │  │  stm32h7xx_hal_smartcard_ex.h
│  │  │  stm32h7xx_hal_smbus.h
│  │  │  stm32h7xx_hal_spdifrx.h
│  │  │  stm32h7xx_hal_spi.h
│  │  │  stm32h7xx_hal_spi_ex.h
│  │  │  stm32h7xx_hal_sram.h
│  │  │  stm32h7xx_hal_swpmi.h
│  │  │  stm32h7xx_hal_tim.h
│  │  │  stm32h7xx_hal_tim_ex.h
│  │  │  stm32h7xx_hal_uart.h
│  │  │  stm32h7xx_hal_uart_ex.h
│  │  │  stm32h7xx_hal_usart.h
│  │  │  stm32h7xx_hal_usart_ex.h
│  │  │  stm32h7xx_hal_wwdg.h
│  │  │  stm32h7xx_ll_adc.h
│  │  │  stm32h7xx_ll_bdma.h
│  │  │  stm32h7xx_ll_bus.h
│  │  │  stm32h7xx_ll_comp.h
│  │  │  stm32h7xx_ll_cordic.h
│  │  │  stm32h7xx_ll_cortex.h
│  │  │  stm32h7xx_ll_crc.h
│  │  │  stm32h7xx_ll_crs.h
│  │  │  stm32h7xx_ll_dac.h
│  │  │  stm32h7xx_ll_delayblock.h
│  │  │  stm32h7xx_ll_dma.h
│  │  │  stm32h7xx_ll_dma2d.h
│  │  │  stm32h7xx_ll_dmamux.h
│  │  │  stm32h7xx_ll_exti.h
│  │  │  stm32h7xx_ll_fmac.h
│  │  │  stm32h7xx_ll_fmc.h
│  │  │  stm32h7xx_ll_gpio.h
│  │  │  stm32h7xx_ll_hrtim.h
│  │  │  stm32h7xx_ll_hsem.h
│  │  │  stm32h7xx_ll_i2c.h
│  │  │  stm32h7xx_ll_iwdg.h
│  │  │  stm32h7xx_ll_lptim.h
│  │  │  stm32h7xx_ll_lpuart.h
│  │  │  stm32h7xx_ll_mdma.h
│  │  │  stm32h7xx_ll_opamp.h
│  │  │  stm32h7xx_ll_pwr.h
│  │  │  stm32h7xx_ll_rcc.h
│  │  │  stm32h7xx_ll_rng.h
│  │  │  stm32h7xx_ll_rtc.h
│  │  │  stm32h7xx_ll_sdmmc.h
│  │  │  stm32h7xx_ll_spi.h
│  │  │  stm32h7xx_ll_swpmi.h
│  │  │  stm32h7xx_ll_system.h
│  │  │  stm32h7xx_ll_tim.h
│  │  │  stm32h7xx_ll_usart.h
│  │  │  stm32h7xx_ll_usb.h
│  │  │  stm32h7xx_ll_utils.h
│  │  │  stm32h7xx_ll_wwdg.h
│  │  │  stm32_assert_template.h
│  │  │  
│  │  └─Legacy
│  │          stm32_hal_legacy.h
│  │          
│  └─Src
│          stm32h7xx_hal.c
│          stm32h7xx_hal_adc.c
│          stm32h7xx_hal_adc_ex.c
│          stm32h7xx_hal_cec.c
│          stm32h7xx_hal_comp.c
│          stm32h7xx_hal_cordic.c
│          stm32h7xx_hal_cortex.c
│          stm32h7xx_hal_crc.c
│          stm32h7xx_hal_crc_ex.c
│          stm32h7xx_hal_cryp.c
│          stm32h7xx_hal_cryp_ex.c
│          stm32h7xx_hal_dac.c
│          stm32h7xx_hal_dac_ex.c
│          stm32h7xx_hal_dcmi.c
│          stm32h7xx_hal_dfsdm.c
│          stm32h7xx_hal_dfsdm_ex.c
│          stm32h7xx_hal_dma.c
│          stm32h7xx_hal_dma2d.c
│          stm32h7xx_hal_dma_ex.c
│          stm32h7xx_hal_dsi.c
│          stm32h7xx_hal_dts.c
│          stm32h7xx_hal_eth.c
│          stm32h7xx_hal_eth_ex.c
│          stm32h7xx_hal_exti.c
│          stm32h7xx_hal_fdcan.c
│          stm32h7xx_hal_flash.c
│          stm32h7xx_hal_flash_ex.c
│          stm32h7xx_hal_fmac.c
│          stm32h7xx_hal_gfxmmu.c
│          stm32h7xx_hal_gpio.c
│          stm32h7xx_hal_hash.c
│          stm32h7xx_hal_hash_ex.c
│          stm32h7xx_hal_hcd.c
│          stm32h7xx_hal_hrtim.c
│          stm32h7xx_hal_hsem.c
│          stm32h7xx_hal_i2c.c
│          stm32h7xx_hal_i2c_ex.c
│          stm32h7xx_hal_i2s.c
│          stm32h7xx_hal_i2s_ex.c
│          stm32h7xx_hal_irda.c
│          stm32h7xx_hal_iwdg.c
│          stm32h7xx_hal_jpeg.c
│          stm32h7xx_hal_lptim.c
│          stm32h7xx_hal_ltdc.c
│          stm32h7xx_hal_ltdc_ex.c
│          stm32h7xx_hal_mdios.c
│          stm32h7xx_hal_mdma.c
│          stm32h7xx_hal_mmc.c
│          stm32h7xx_hal_mmc_ex.c
│          stm32h7xx_hal_msp_template.c
│          stm32h7xx_hal_nand.c
│          stm32h7xx_hal_nor.c
│          stm32h7xx_hal_opamp.c
│          stm32h7xx_hal_opamp_ex.c
│          stm32h7xx_hal_ospi.c
│          stm32h7xx_hal_otfdec.c
│          stm32h7xx_hal_pcd.c
│          stm32h7xx_hal_pcd_ex.c
│          stm32h7xx_hal_pssi.c
│          stm32h7xx_hal_pwr.c
│          stm32h7xx_hal_pwr_ex.c
│          stm32h7xx_hal_qspi.c
│          stm32h7xx_hal_ramecc.c
│          stm32h7xx_hal_rcc.c
│          stm32h7xx_hal_rcc_ex.c
│          stm32h7xx_hal_rng.c
│          stm32h7xx_hal_rng_ex.c
│          stm32h7xx_hal_rtc.c
│          stm32h7xx_hal_rtc_ex.c
│          stm32h7xx_hal_sai.c
│          stm32h7xx_hal_sai_ex.c
│          stm32h7xx_hal_sd.c
│          stm32h7xx_hal_sdram.c
│          stm32h7xx_hal_sd_ex.c
│          stm32h7xx_hal_smartcard.c
│          stm32h7xx_hal_smartcard_ex.c
│          stm32h7xx_hal_smbus.c
│          stm32h7xx_hal_spdifrx.c
│          stm32h7xx_hal_spi.c
│          stm32h7xx_hal_spi_ex.c
│          stm32h7xx_hal_sram.c
│          stm32h7xx_hal_swpmi.c
│          stm32h7xx_hal_tim.c
│          stm32h7xx_hal_timebase_rtc_alarm_template.c
│          stm32h7xx_hal_timebase_rtc_wakeup_template.c
│          stm32h7xx_hal_timebase_tim_template.c
│          stm32h7xx_hal_tim_ex.c
│          stm32h7xx_hal_uart.c
│          stm32h7xx_hal_uart_ex.c
│          stm32h7xx_hal_usart.c
│          stm32h7xx_hal_usart_ex.c
│          stm32h7xx_hal_wwdg.c
│          stm32h7xx_ll_adc.c
│          stm32h7xx_ll_bdma.c
│          stm32h7xx_ll_comp.c
│          stm32h7xx_ll_cordic.c
│          stm32h7xx_ll_crc.c
│          stm32h7xx_ll_crs.c
│          stm32h7xx_ll_dac.c
│          stm32h7xx_ll_delayblock.c
│          stm32h7xx_ll_dma.c
│          stm32h7xx_ll_dma2d.c
│          stm32h7xx_ll_exti.c
│          stm32h7xx_ll_fmac.c
│          stm32h7xx_ll_fmc.c
│          stm32h7xx_ll_gpio.c
│          stm32h7xx_ll_hrtim.c
│          stm32h7xx_ll_i2c.c
│          stm32h7xx_ll_lptim.c
│          stm32h7xx_ll_lpuart.c
│          stm32h7xx_ll_mdma.c
│          stm32h7xx_ll_opamp.c
│          stm32h7xx_ll_pwr.c
│          stm32h7xx_ll_rcc.c
│          stm32h7xx_ll_rng.c
│          stm32h7xx_ll_rtc.c
│          stm32h7xx_ll_sdmmc.c
│          stm32h7xx_ll_spi.c
│          stm32h7xx_ll_swpmi.c
│          stm32h7xx_ll_tim.c
│          stm32h7xx_ll_usart.c
│          stm32h7xx_ll_usb.c
│          stm32h7xx_ll_utils.c
│          
└─User
        main.c
        main.h
        stm32h7xx_hal_conf.h
        systemclock.c
        systemclock.h

文件添加完成之后,在keil中新建一个H7的工程,讲工程中新建如下几个组把相关的源文件给添加进去
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
添加文件之后需要在keil中添加如下配置
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
在Define中添加了两个宏,USE_HAL_DRIVER这个宏表示用的是HAL库,在编译的时候会把HAL库的驱动进行编译,STM32H743xx这个宏表示的是用到H743的芯片(不同的芯片对应不同的宏定义)
为什么是这两个宏定义呢,在以下代码的位置可以看到原因
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
有了这个宏才能将stm32h7xx_hal.h头文件添加进去,这个头文件中包含了HAL库各个外设驱动文件
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
有了上边的宏定义才能将stm32h743xx.h头文件包含进去,这个头文件是定义了对应芯片的各个外设基地址和寄存器地址等相关的内容
添加完以上代码之后在main.c和main.h文件中添加如下代码
main.h文件中内容

#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32h7xx_hal.h"

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */

main.c文件中内容

/**
 * @file main.c
 * @author 匠心智造 (QQ资料群:723687715)
 * @brief 
 * @version 0.1
 * @date 2021-07-13
 * 
 * @copyright Copyright (c) 2021
 * 
 */
#include "main.h"

int main(void)
{
	while(1)
	{
		;
	}
}

代码添加完成之后进行编译,编译之后会出现如下错误
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
这个错误是这几个文件都是官方给的模板,并不是底层驱动文件,把含有template的都移除,编译之后还有如下两个错误
基于HAL库的STM32H7工程开发系列教程一《手动配置基本工程》
这个LL文件一般用不到,也先把这个移除再编译就没有错了,基本的工程结构就配置完成了。但是这个工程还不不能直接运行,下一篇文章讲外部HSE和LSE时钟的配置,通用GPIO端口的配置。
源代码可添加代码中的QQ群中下载。

上一篇:2021/07/20 悍匠暑假集训第三天


下一篇:STM32CubeMX(03)GPIO口输出+定时器实验实现交通灯