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

120 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 库 — 两者是独立的代码体系