stm32-development-workflow
STM32通用程序开发完整流程,基于STM32CubeCLT命令行工具链。涵盖工具链安装、 HAL库配置、项目构建、固件编译和ST-Link烧录。适用于STM32F1/F4/H7等系列, 解决编译错误、链接错误、烧录失败等常见问题。
DeepseekModel
Curated skill
Quality Good · 64
v1.0.0
Get
https://deepseekmodel.com/api/download.php?id=ericsun787-stm32-development-workflow-skill-md&format=skill
Download .skill
Standard format with system_prompt and model_config, ready for any agent framework
The actual content of the system_prompt field in the .skill file.
name stm32-development-workflow description STM32通用程序开发完整流程,基于STM32CubeCLT命令行工具链。涵盖工具链安装、 HAL库配置、项目构建、固件编译和ST-Link烧录。适用于STM32F1/F4/H7等系列, 解决编译错误、链接错误、烧录失败等常见问题。 author EricSun version 1.0.0 date 2025-02-27T00:00:00.000Z STM32 通用程序开发流程 概述 基于STM32CubeCLT命令行工具链的完整STM32开发流程,无需依赖Keil或STM32CubeIDE。 开发环境准备 1. 安装STM32CubeCLT 从ST官网下载并安装STM32CubeCLT,包含: arm-none-eabi-gcc 编译器 STM32CubeProgrammer (烧录工具) ST-Link驱动 典型安装路径: C:\ST\STM32CubeCLT_1.21.0 2. 获取HAL库 从GitHub下载STM32Cube固件包: # STM32CubeF4示例 git clone https://github.com/STMicroelectronics/STM32CubeF4.git # 或从ST官网下载完整固件包 固件包目录结构: STM32Cube_FW_F4_V1.28.0/ ├── Drivers/ │ ├── STM32F4xx_HAL_Driver/ # HAL库源文件 │ ├── CMSIS/ # CMSIS核心文件 │ └── BSP/ # 板级支持包 ├── Projects/ # 示例项目 └── Utilities/ # 工具 项目目录结构 my-stm32-project/ ├── Core/ │ ├── Inc/ # 核心头文件 │ │ └── main.h │ └── Src/ # 核心源文件 │ └── main.c ├── Drivers/ │ ├── STM32F4xx_HAL_Driver/ # HAL库 │ │ ├── Inc/ # HAL头文件 │ │ │ └── stm32f4xx_hal_conf.h # 关键配置文件 │ │ └── Src/ # HAL源文件 │ ├── CMSIS/ # CMSIS │ │ ├── Core/ # CMSIS核心 │ │ └── Device/ST/STM32F4xx/ # 设备特定文件 │ │ ├── Include/ # 启动文件 │ │ └── Source/Templates/ │ │ ├── gcc/ # GCC启动文件 │ │ │ └── startup_stm32f429xx.s │ │ └── system_stm32f4xx.c │ └── BSP/ # 板级支持包(可选) ├── build/ # 构建输出 └── build.sh # 构建脚本 HAL库配置 关键配置文件 stm32f4xx_hal_conf.h 启用需要的HAL模块: # define HAL_MODULE_ENABLED # define HAL_GPIO_MODULE_ENABLED # define HAL_RCC_MODULE_ENABLED # define HAL_FLASH_MODULE_ENABLED # define HAL_PWR_MODULE_ENABLED # define HAL_CORTEX_MODULE_ENABLED // 根据外设需求启用 # define HAL_DMA_MODULE_ENABLED # define HAL_UART_MODULE_ENABLED # define HAL_TIM_MODULE_ENABLED # define HAL_I2C_MODULE_ENABLED # define HAL_SPI_MODULE_ENABLED # define HAL_ADC_MODULE_ENABLED // ... etc 时钟配置(HSE_VALUE必须与硬件匹配): # if !defined (HSE_VALUE) # define HSE_VALUE 8000000U // 8MHz for STM32F429I-DISCO # endif 构建脚本 build.sh #!/bin/bash TOOLCHAIN= "/c/ST/STM32CubeCLT_1.21.0/GNU-tools-for-STM32/bin" CC= " ${TOOLCHAIN} /arm-none-eabi-gcc" AS= " ${TOOLCHAIN} /arm-none-eabi-gcc -x assembler-with-cpp" LD= " ${TOOLCHAIN} /arm-none-eabi-gcc" CP= " ${TOOLCHAIN} /arm-none-eabi-objcopy" SZ= " ${TOOLCHAIN} /arm-none-eabi-size" PROJECT_DIR= "/path/to/project" BUILD_DIR= " ${PROJECT_DIR} /build" # MCU配置 MCU= "-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard" DEFS= "-DUSE_HAL_DRIVER -DSTM32F429xx" INCLUDES= "-I ${PROJECT_DIR} /Core/Inc \ -I ${PROJECT_DIR} /Drivers/STM32F4xx_HAL_Driver/Inc \ -I ${PROJECT_DIR} /Drivers/CMSIS/Device/ST/STM32F4xx/Include \ -I ${PROJECT_DIR} /Drivers/CMSIS/Include" CFLAGS= " ${MCU} ${DEFS} ${INCLUDES} -O2 -Wall -fdata-sections -ffunction-sections" ASFLAGS= " ${MCU} ${DEFS} ${INCLUDES} -Wall" # 链接器脚本路径 LDSCRIPT= " ${PROJECT_DIR} /Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/linker/STM32F429ZITx_FLASH.ld" LDFLAGS= " ${MCU} -specs=nano.specs -T ${LDSCRIPT} -lc -lm -lnosys -Wl,--gc-sections" # 源文件列表 HAL_SRCS=( " ${PROJECT_DIR} /Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c" " ${PROJECT_DIR} /Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c" " ${PROJECT_DIR} /Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c" " ${PROJECT_DIR} /Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c" # ... 添加需要的HAL模块 ) CORE_SRCS=( " ${PROJECT_DIR} /Core/Src/main.c" " ${PROJECT_DIR} /Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c" ) ASM_SRCS=( " ${PROJECT_DIR} /Drivers/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f429xx.s" ) # 编译函数 compile_c () { local src= $1 local obj= " ${BUILD_DIR} / $(basename ${src%.c}.o) " echo " CC ${src} " ${CC} -c ${CFLAGS} -o ${obj} ${src} echo " ${obj} " } compile_asm () { local src= $1 local obj= " ${BUILD_DIR} / $(basename ${src%.s}.o) " echo " AS ${src} " ${AS} -c ${ASFLAGS} -o ${obj} ${src} echo " ${obj} " } # 主构建流程 echo "Building project..." mkdir -p ${BUILD_DIR} OBJECTS= "" # 编译HAL文件 for src in " ${HAL_SRCS[@]} " ; do obj=$(compile_c " ${src} " ) OBJECTS= " ${OBJECTS} ${obj} " done # 编译核心文件 for src in " ${CORE_SRCS[@]} " ; do obj=$(compile_c " ${src} " ) OBJECTS= " ${OBJECTS} ${obj} " done # 编译启动文件 for src in " ${ASM_SRCS[@]} " ; do obj=$(compile_asm " ${src} " ) OBJECTS= " ${OBJECTS} ${obj} " done # 链接 echo "Linking..." ${LD} ${OBJECTS} ${LDFLAGS} -o ${BUILD_DIR} /project.elf # 生成HEX/BIN ${CP} -O ihex ${BUILD_DIR} /project.elf ${BUILD_DIR} /project.hex ${CP} -O binary -S ${BUILD_DIR} /project.elf ${BUILD_DIR} /project.bin # 显示大小 ${SZ} ${BUILD_DIR} /project.elf echo "Build complete!" 烧录流程 1. 检查ST-Link连接 STM32_Programmer_CLI.exe -l stlink 2. 升级ST-Link固件(如需要) # 如果提示"Old ST-Link firmware version" cd C:\ST\STM32CubeCLT_1.21.0 java -jar STLink-gdb-server/bin/STLinkUpgrade.jar -sn [序列号] 3. 烧录固件 # 烧录HEX文件 STM32_Programmer_CLI.exe \ -c port=SWD sn=[序列号] \ -w build/project.hex 0x08000000 \ -v -rst 参数说明: -c port=SWD : 使用SWD接口 -w : 写入文件 -v : 验证 -rst : 复位运行 常见编译错误及解决 错误 原因 解决 unknown type name 'DMA2D_HandleTypeDef' HAL模块未启用 在hal_conf.h中定义 #define HAL_DMA2D_MODULE_ENABLED undefined reference to 'SystemCoreClock' 缺少system文件 添加 system_stm32f4xx.c 到编译 undefined reference to 'FMC_SDRAM_Init' 缺少LL库 添加 stm32f4xx_ll_fmc.c 到编译 multiple definition of 'Font8' 字体重复定义 检查是否重复包含字体源文件 cannot open linker script file 链接器脚本路径错误 检查LDSCRIPT路径 调试技巧 1. 验证HAL配置 // 在main()中添加检查 # if !defined(HSE_VALUE) # error "HSE_VALUE not defined!" # endif 2. 使用LED指示程序状态 // 初始化LED BSP_LED_Init(LED3); // 在关键位置闪烁 while ( 1 ) { BSP_LED_Toggle(LED3); HAL_Delay( 500 ); } 3. 检查时钟配置 // 打印系统时钟频率(需要串口) printf ( "System Clock: %lu Hz\n" , HAL_RCC_GetSysClockFreq()); 参考资源 STM32CubeF4 GitHub STM32CubeCLT用户手册 GCC ARM选项参考
Keywords that activate this skill. Click one to copy it.
This skill does not provide trigger words.
The downloaded .skill package contains the following fields.
| Field | Description |
|---|---|
| format | Format tag (skill/v1) |
| skill_id | Unique skill ID |
| name | Skill name |
| version | Version |
| description | Description |
| category | Categories (array) |
| trigger_words | Trigger words |
| tags | Tags |
| source | Source |
| source_url | Source URL (this page) |
| exported_at | Exported at (set per download) |
| system_prompt | System prompt body |
| model_config | Model config: provider / model / temperature / max_tokens / top_p |
| examples | Examples |
| install_guide | Import guide for Coze / Dify / Claude / custom frameworks |
The same skill can be exported in different platform formats.