5.1 KiB
5.1 KiB
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 库 — 两者是独立的代码体系