在实际项目中移植并配置hal库

下图是我项目的目录结构,关于目录设计思想,这里不展开描述,只讲解如何将hal库移植到该项目中并配置:

首先先明确 HAL 移植的"最小闭环"需要哪些文件(以STM32F407为例):

  1. CMSIS + STM32F4xx_HAL_Driver

    CMSISARM Cortex‑M 内核 + STM32 设备提供"最底层统一接口/头文件/启动模板" STM32F4xx_HAL_DriverSTHAL 驱动库

  2. 三件套:startup / system / linker

    • startup_stm32f407xx.s

    MCU 上电复位后执行的第一段代码

    • system_stm32f4xx.c

    芯片级系统初始化与全局时钟变量维护

    • app.ld

    告诉链接器 Flash/RAM/CCMRAM 的地址与大小和各内存段(.isr_vector/.text/.rodata/.data/.bss)的位 置,并导出启动文件需要的符号(_estack/_sidata/_sdata/_edata/_sbss/_ebss)

  3. stm32f4xx_hal_conf.h

    HAL 的"编译期配置开关",决定:

    • 开启哪些 HAL 模块(GPIO/UART/RCC/SDIO/FSMC...)
    • 时钟参数(例如 HSE_VALUE
    • 断言/回调等选项
  4. stm32f4xx_it.c/.h

    实现"中断入口函数"

  5. stm32f4xx_hal_msp.c

    实现 HAL 提供的"硬件相关回调(钩子)"

关于本项目hal移植,我将其分为三部分:

  • external/st(原始代码):包括CMSISSTM32F4xx_HAL_Driver
  • platform(芯片级):包括startup_stm32f407xx.ssystem_stm32f4xx.c
  • applications(产物级): 包括app.ldstm32f4xx_hal_conf.hstm32f4xx_it.c/.hstm32f4xx_hal_msp.c

在完成文件移植后还需要进行一些配置:

  • HAL 配置文件stm32f4xx_hal_conf.h,必须正确配置:
    • HSE_VALUE(板子外部晶振频率,错了 PLL 会失败)
    • 启用用到的 HAL 模块宏(例如 GPIO/RCC/PWR...)
  • 配置stm32f4xx_it.c/.h,至少实现:
    • SysTick_Handler():调用 HAL_IncTick()(建议再调用 HAL_SYSTICK_IRQHandler())

至此hal库的移植和配置都已完成,但要想使项目运行起来,在Keil或其他IDE软件中再配置一下编译器、编译路径等,基本就可以用了,如果只想用vscode进行开发,可以配置外部编译器arm-none-eabi-gcc,并用cmakeninja组织和构建编译,再用openocd+任意仿真器下载程序即可,如果有想了解vscode+arm-gcc+cmake+ninja+openocd这套开发流程的(全链条开源、高效且高度可定制,可跨平台),可以留言,如果超过三个人,我就出一期教程。

相关推荐
youcans_21 小时前
【嵌入式软件AI编程】01. 基于 STM32/Claude Code的AI编程
stm32·mcu·嵌入式·ai编程·claude code
小智学长 | 嵌入式21 小时前
实测GPT-6 Astra绘制硬件原理图和PCB效果分享
嵌入式·嵌入式开发·ai工具·单片机开发
一路往蓝-Anbo1 天前
第七篇:以太网设计 —— 从 RMII 时序到变压器隔离的深度拆解
stm32·单片机·嵌入式硬件·嵌入式·stm32硬件设计
玄奕子2 天前
三相逆变器系列(一):看懂三相全桥拓扑
嵌入式·dsp开发·电力电子·ti c2000·三相全桥逆变
the sun342 天前
嵌入式易错点:ARM指令架构、IP核、MCU厂商关系+BOOTLoader刷机原理
stm32·嵌入式
嵌入式阿蔡3 天前
CoAP / LwM2M 轻量协议:受限设备为什么不用 MQTT
单片机·物联网·嵌入式
长江后浪博客4 天前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
Jason_zhao_MR4 天前
Linux与采集MCU通信为什么我们用了双SPI
linux·arm开发·单片机·嵌入式硬件·嵌入式
嵌入式阿蔡4 天前
云平台设备接入实战:三元组鉴权、属性上报与命令下发(阿里云/华为云)
嵌入式硬件·物联网·嵌入式·存储
分支预测失败5 天前
RISC-V 上下文切换实战:从 Trap 入口到 Linux 进程调度
后端·嵌入式