Files
new_f_3/CLAUDE.md
刘正航 609eb878d1 New
2026-04-16 16:55:01 +08:00

5.1 KiB
Raw Permalink Blame History

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

项目概述

基于 STM32F103ZET6ARM Cortex-M372MHz512KB Flash64KB SRAMMFT 步进电机控制器 固件。应用程序通过 DRV8880 驱动芯片 控制步进电机,支持 UART 串口命令接口和数码管显示。

代码源自 安富莱 STM32-V4 开发板 BSP 模板。

内存布局

区域 地址范围 说明
Bootloader 0x0800 0000 - 0x0800 7FFF 32KB IAP 引导程序
应用程序 0x0800 8000 - 0x080F FFFF 主固件(约 480KB
SRAM1 0x2000 0000 - 0x2000 FFFF 64KB 内部 RAM

重要main()SCB->VTOR = 0x08008000 设置应用程序的中断向量表偏移。

构建系统

这是一个 Keil MDK / IAR EWARM 项目,没有 Makefile 或 CMake。需要在 IDE 中构建:

Keil MDK

  • 工程文件:Project/MDK-ARM/project.uvprojx
  • 两个 TargetFlash(从内部 Flash 运行)和 CpuRAM(从 RAM 运行,用于调试)
  • 输出文件:Project/output(mdk).hex
  • VS Code C/C++ 配置在 Project/MDK-ARM/.vscode/c_cpp_properties.json,包含头文件路径和宏定义

IAR EWARM

  • 工作区:Project/EWARMv6/Project.www
  • 输出文件:Project/output(iar).hex

编译器宏定义

  • USE_STDPERIPH_DRIVER — 启用 ST 标准外设库
  • STM32F10X_HD — 大容量器件512KB Flash
  • VECT_TAB_SRAM — 仅用于 RAM 调试目标

栈/堆大小

在启动汇编文件中配置(Stack_Size EQU 0x00008000Heap_Size EQU 0x00000400)。

代码架构

Motor/
├── Bootloader/          # IAP 引导程序(独立工程,基于 ST HAL 库)
│   ├── Drivers/         # BSPLCD、LED、KEY、STMFLASH、数码管
│   ├── Middlewares/     # 第三方库
│   └── User/            # 引导程序应用代码
├── Libraries/           # ST/ARM 提供的库(不要修改)
│   ├── CMSIS/           # ARM CMSIS 头文件 + startup_stm32f103xe.s
│   ├── STM32F10x_StdPeriph_Driver/  # 标准外设库
│   └── STM32_USB-FS-Device_Driver/  # USB Device 库
├── User/                # 应用源代码(主要工作区)
│   ├── app/             # 应用层
│   │   ├── src/main.c   # 入口、电机控制逻辑、UART 命令解析
│   │   └── inc/main.h   # 应用头文件
│   └── bsp/             # 板级支持包(硬件抽象层)
│       ├── bsp.c/h      # BSP 初始化、周期定时器1ms/10ms、空闲循环
│       ├── src/         # BSP 驱动实现
│       └── inc/         # BSP 驱动头文件
├── Project/             # IDE 工程文件 + 构建输出
│   ├── MDK-ARM/         # Keil MDK 工程
│   ├── EWARMv6/         # IAR EWARM 工作区
│   └── bin_file/        # 生成的二进制文件
└── Doc/                 # 文档(中文)

关键源文件

文件 功能
User/app/src/main.c 主入口、UART 命令解析、电机控制状态机
User/bsp/bsp.c 硬件初始化、周期任务分发
User/bsp/src/bsp_step_moto.c 步进电机控制(脉冲计数、启动/停止)
User/bsp/src/bsp_drv8880.c DRV8880 电机驱动接口
User/bsp/src/bsp_tim_pwm.c 定时器 PWM 生成电机脉冲
User/bsp/src/bsp_usart_dma.c UART + DMA 串口通信
User/bsp/src/bsp_digital_tube.c 数码管7 段)显示
User/bsp/src/bsp_key.c 按键扫描和键值处理
User/bsp/src/bsp_beep.c 蜂鸣器音调生成

UART 命令接口

通过 USART1PA9/PA10115200 波特率)通信。支持的命令:

命令 功能
? 获取当前位置角度
s 停止电机
z 将当前位置设为零点
MF 打印系统信息
[r:频率:角度] 以指定转速旋转到绝对角度
[rr:频率:角度] 以指定转速旋转相对角度

常量:MAX_SPEED = 400STEP_PER_LAP = 8461(每转步数)。

BSP 架构

BSP 采用周期定时器驱动模型:

  • bsp_RunPer1ms() — 每 1ms 调用一次(数码管刷新)
  • bsp_RunPer10ms() — 每 10ms 调用一次(按键扫描、蜂鸣器处理)
  • bsp_Idle() — 在主循环空闲时调用

bsp.h 是所有 BSP 模块的统一入口。应用程序只需 #include "bsp.h"

Bootloader独立工程

位于 Bootloader/,是一个基于 STM32 HAL 库的 IAP 引导程序(主应用使用 StdPeriph 库,两者不同)。通过 UART 接收固件并烧录到 0x08008000。作为独立的 Keil 工程构建,位于 Bootloader/Projects/ 下。

注意事项

  • 源文件使用 GBK/中文编码 — 在 UTF-8 编辑器中可能显示乱码
  • 工程中积累了多个用户的重复 .uvgui 文件 — 可忽略
  • Bootloader/keilkill.bat 用于清理 Keil 临时文件
  • CopyHex_Flash.bat 用于复制编译生成的 hex 文件
  • Libraries/ 目录是厂商提供的代码,应避免修改
  • 主应用使用 StdPeriph 库Bootloader 使用 HAL 库 — 两者是独立的代码体系