背景
STM32 HAL庫是未來的主流,雖然目前還是以標准庫為准。但需要作為學習,以便於未來使用時可以查閱。
這一講我們會介紹如何搭建HAL庫的環境。
2020年初,我發現CubeMX非常好用,於是不再維護本文。
准備
由於HAL庫是在STM32 CubeMX中作為拓展包的形式出現的,那么首先需要安裝CubeMX:下載地址
CubeMX 需要 java 的運行環境(runtime),所以在裝之前還需要 安裝java。
下載包
1)打開軟件
2)Alt+U 或者 Help --> Manage embeded software packages
3)勾選對應型號的包,Install now (stm32cube_fw_f4_v1250.zip)
4)之后可以在Help -> Updater Settings
中的Repository Folder
看到庫指定路徑
新建目錄
(按照CubuMX的標准)新建 Drivers、 Inc、 Project、 Middlewares、Src
Drivers : 存放CMSIS文件和HAL庫文件
Project :存放Keil工程
Middlewares:第三方庫等
Inc : 存放用戶有關的頭文件
Src :存放用戶有關的源文件
Drivers / CMSIS
- startup_stm32f429xx.s : Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm
- core_cm4.h (以 core_cm4.h 中需要的 頭文件 為准) : Drivers/CMSIS/Include
-> cmsis_version.h cmsis_compiler.h cmsis_armcc.h
- system_stm32f4xx.h stm32f429xx.h stm32f4xx.h : Drivers/CMSIS/Device/ST/STM32F4xx/Include
Drivers / STM32F4xx_HAL_Driver
- inc : Drivers/STM32F4xx_HAL_Driver/inc
- src : Drivers/STM32F4xx_HAL_Driver/src
- 可以刪除 ll有關 與template 有關的文件
Src:
- bsp/{src, inc}
- main.c CubeMX自動生成
- stm32f4xx_hal_msp.c CubeMX自動生成
- stm32f4xx_hal_conf.h CubeMX自動生成
- stm32f4xx_it.c CubeMX自動生成
- stm32f4xx_it.h CubeMX自動生成
- system_stm32f4xx.c : Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates
Project:
- 工程有關
以下是一個參考腳本:
#
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
#
# File Name: make_hal.sh
# Created : Thu 05 Mar 2020 04:57:32 PM CST
#
#!/bin/sh
TOP=`pwd`
BASE=`pwd`
PROJECTNAME=Project_Hal_STM32F4_new
LIB_DIR=./STM32Cube_FW_F4_V1.25.0/
make_dirs () {
mkdir ${TOP}/${PROJECTNAME} -p
cd ${TOP}/${PROJECTNAME}
mkdir CMSIS Library User Project -p
BASE=`pwd`
}
get_LIB_DIR_PATH () {
cd ${TOP}
cd ${LIB_DIR}
LIB_DIR=`pwd`
echo "$LIB_DIR"
}
make_CMSIS () {
echo ""
echo "make_CMSIS"
cd ${BASE}
echo `ls ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/`
echo "cp [Drivers/CMSIS/Device/ST/STM32F4xx/Include/*{system_stm32f4xx.h stm32f429xx.h stm32f4xx.h}]"
cp ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Include/* ${BASE}/CMSIS -v -r
# 在 User 目錄下可能也會有,我看看 CubeMX 生成的有沒有
#echo `ls ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/`
#echo "cp [Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c]"
#cp ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c ${BASE}/CMSIS
echo `ls ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm`
echo "cp [Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429xx.s]"
cp ${LIB_DIR}/Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f429xx.s ${BASE}/CMSIS -v -r
echo `ls ${LIB_DIR}/Drivers/CMSIS/Include`
echo "cp [Drivers/CMSIS/Include/{cmsis_version.h cmsis_compiler.h cmsis_armcc.h core_cm4.h}]"
cd ${LIB_DIR}/Drivers/CMSIS/Include
cp cmsis_version.h cmsis_compiler.h cmsis_armcc.h core_cm4.h mpu_armv7.h ${BASE}/CMSIS -r -v
}
make_Library() {
cd ${BASE}
echo ""
echo "make_Library"
echo `ls ${LIB_DIR}/Drivers/STM32F4xx_HAL_Driver/`
echo "cp ${LIB_DIR}/Drivers/STM32F4xx_HAL_Driver/{inc src}"
#mkdir -p ${BASE}/Library/inc ${BASE}/Library/src
cp ${LIB_DIR}/Drivers/STM32F4xx_HAL_Driver/Inc ${BASE}/Library/inc/ -r -v
cp ${LIB_DIR}/Drivers/STM32F4xx_HAL_Driver/Src ${BASE}/Library/src/ -r -v
#- 刪除 ll有關 : 名字 帶有 "_ll_" 的文件
#find ${BASE}/Library | grep "_ll_" | xargs -i rm {}
#- 刪除 template 有關 : 名字 帶有 "template" 的文件
#find ${BASE}/Library | grep "template" | xargs -i rm {}
}
make_User () {
cd ${BASE}
echo ""
echo "make_User"
echo `ls ${LIB_DIR}/Projects/STM32F429I-Discovery/Templates/Src/*`
echo "cp [Projects/STM32F429I-Discovery/Templates/Src/*]"
cd ${LIB_DIR}/Projects/STM32F429I-Discovery/Templates/Src/
cp main.c stm32f4xx_hal_msp.c stm32f4xx_it.c system_stm32f4xx.c ${BASE}/User -r -v
cd ${BASE}
cp ${LIB_DIR}/Projects/STM32F429I-Discovery/Templates/Src/* ${BASE}/User -r -v
echo `ls ${LIB_DIR}/Projects/STM32F429I-Discovery/Templates/Inc/*`
echo "cp [Projects/STM32F429I-Discovery/Templates/Inc/*]"
cp ${LIB_DIR}/Projects/STM32F429I-Discovery/Templates/Inc/* ${BASE}/User -r -v
mkdir ${BASE}/User/bsp/src ${BASE}/User/bsp/inc -p
}
echo "$[Project_Hal_STM32F4] is Creating."
make_dirs
get_LIB_DIR_PATH
make_CMSIS
make_Library
make_User
echo "$[Project_Hal_STM32F4] had been Created."
exit 0
-D: USE_HAL_DRIVER STM32F429xx