需求
-
在STM32CubeMX中創建項目時,如果只選擇了“僅複製必要庫文件”(Copy only the necessary library files),生成的代碼只會包含項目中已啓用的外設對應的HAL源文件。
-
若後期需要新增未啓用的外設(如新的UART、TIMER等),需要手動添加對應的HAL庫文件。
已下是添加步驟
注意 我的項目是使用CMake進行管理的
獲取完整HAL庫
-
訪問ST官網下載對應系列(如F1、F4)的完整Cube包:STM32Cube MCU和MPU包。
-
下載並解壓後,HAL庫源碼位於
Drivers/STM32F1xx_HAL_Driver目錄下。
複製所需文件到項目中
文件路徑如圖
YourProject/
├── Drivers/
│ ├── CMSIS/ # CubeMX生成
│ └── STM32F1xx_HAL_Driver/
│ ├── Inc/ # HAL頭文件,文件添加到這裏
│ └── Src/ # HAL源文件,文件添加到這裏
└── CMakeLists.txt # 項目主CMake文件
修改CMake配置
通常CubeMX生成的CMake項目會在 Drivers/STM32F1xx_HAL_Driver 目錄下有一個子 CMakeLists.txt,用於管理所有HAL源文件。
在指定位置添加對應c文件
# STM32 HAL/LL Drivers
set(STM32_Drivers_Src
${CMAKE_CURRENT_SOURCE_DIR}/../../Core/Src/system_stm32f1xx.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_uart.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_usart.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c
)
啓用HAL模塊宏定義
在 stm32f1xx_hal_conf.h 中啓用對應模塊。
進入文件搜索對應頭文件,發現導入頭文件語句是灰的,需要將對應宏定義的註釋刪除
#ifdef HAL_TIM_MODULE_ENABLED
#include "stm32f1xx_hal_tim.h" // 這些導入語句是灰的,因為對應宏定義被註釋了
#endif /* HAL_TIM_MODULE_ENABLED */
#ifdef HAL_UART_MODULE_ENABLED
#include "stm32f1xx_hal_uart.h"
#endif /* HAL_UART_MODULE_ENABLED */
#ifdef HAL_USART_MODULE_ENABLED
#include "stm32f1xx_hal_usart.h"
#endif /* HAL_USART_MODULE_ENABLED */
將宏定義的註釋刪除
#define HAL_UART_MODULE_ENABLED // 取消這行的註釋
#define HAL_TIM_MODULE_ENABLED // 取消這行的註釋
現在就可以使用庫函數了,導入stm32f1xx_hal.h文件就可以使用對應的句柄和函數了,因為stm32f1xx_hal.h以及包含了stm32f1xx hal conf.h頭文件