120 lines
5.1 KiB
Markdown
120 lines
5.1 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
## 项目概述
|
||
|
||
基于 **STM32F103ZET6**(ARM Cortex-M3,72MHz,512KB Flash,64KB 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/ # BSP(LCD、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 命令接口
|
||
|
||
通过 USART1(PA9/PA10,115200 波特率)通信。支持的命令:
|
||
|
||
| 命令 | 功能 |
|
||
|------|------|
|
||
| `?` | 获取当前位置角度 |
|
||
| `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 库 — 两者是独立的代码体系
|