This commit is contained in:
刘正航
2026-04-16 16:55:01 +08:00
commit 609eb878d1
624 changed files with 214375 additions and 0 deletions

119
CLAUDE.md Normal file
View File

@@ -0,0 +1,119 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
基于 **STM32F103ZET6**ARM Cortex-M372MHz512KB Flash64KB SRAM**MFT 步进电机控制器** 固件。应用程序通过 **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`
- 两个 Target**Flash**(从内部 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 0x00008000``Heap_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 = 400``STEP_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 库 — 两者是独立的代码体系