# Wulin-R2-H7 **Repository Path**: tututu-yao/wulin-r2-h7 ## Basic Information - **Project Name**: Wulin-R2-H7 - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2026-06-18 - **Last Updated**: 2026-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Wulin-R2-H7 ## 项目简介 ## 本仓库代码为Roobopiomeers26赛季主赛道R2机器人下位机控制固件,基于 STM32H7 系列微控制器,采用裸机中断 + DMA + 主循环轮询的事件驱动架构。实现了全向轮底盘运动控制、抬升机构控制、武器头控制及机械臂控制等核心功能,支持 CRSF 遥控器与上位机双控制源。 ### 软件架构 ## 软件架构分为人机交互层-任务调度层-中间通信层-控制算法层-底层驱动层 ### 人机交互层 ### 上位机(miniPC/USB)与遥控器(CRSF/UART7)的指令交互通道 仅完成物理层字节流收发,不涉及协议解析 关键文件:dvc_crsf.cpp、dvc_minipc.cpp ### 任务调度层 ### 管理所有中断源(TIM4 100μs、TIM5 1ms、FDCAN、UART空闲中断、USB接收中断、DMA完成中断) 主循环非阻塞轮询,实现硬实时与软实时上下文隔离 关键文件:tsk_config_and_callback.cpp、stm32h7xx_it.c、drv_tim.cpp ### 中间通信层 ### 协议校验、解包与合法性检查(CRSF协议、miniPC自定义协议) 指令路由至对应功能模块,状态数据打包回传 关键文件:ita_robot.cpp、drv_can.cpp ### 控制算法层 ### 运动学解算与轨迹规划(全向轮逆解、机械臂正逆解) 闭环控制律迭代(PID速度环/位置环/电流环、斜坡函数加减速、堵转检测) 关键文件:crt_chassis.cpp、crt_lift.cpp、crt_arm.cpp、alg_*.cpp ### 底层驱动层 ### 控制量转换为物理执行信号(FDCAN电机指令、PWM占空比) 物理传感信号采集(编码器、电流、DT35距离、限位开关) 关键文件:dvc_motor_*.cpp、drv_can.cpp、drv_adc.cpp ## 工程结构 ## wulin-r2-h7/ ├── Core/ # 核心代码(STM32CubeMX生成) │ ├── Src/ │ │ ├── main.c # 主入口 │ │ ├── stm32h7xx_it.c # 中断向量表 │ │ ├── system_stm32h7xx.c # 系统时钟配置(400MHz SYSCLK) │ │ ├── adc.c # ADC1配置(DT35,DMA循环) │ │ ├── dma.c # DMA通道分配 │ │ ├── fdcan.c # FDCAN1/2/3初始化(1Mbps) │ │ ├── gpio.c # GPIO初始化 │ │ ├── tim.c # TIM3/4/5/12配置 │ │ └── usart.c # UART5/7/USART1/USART10配置 │ └── Inc/ │ ├── User_drv/ │ ├── drv_can.cpp/h # FDCAN收发封装 │ ├── drv_uart.cpp/h # UART DMA空闲中断收发 │ ├── drv_usb.cpp/h # USB CDC收发封装 │ ├── drv_tim.cpp/h # TIM定时器回调注册 │ ├── drv_adc.cpp/h # ADC DMA采样封装 │ ├── drv_math.cpp/h # 数学工具 │ ├── drv_bsp.cpp/h # 板级支持包(DC24V/PWM/按键) │ └── drv_gpio_exti.cpp/h # GPIO外部中断封装 │ ├── User_dvc/ │ ├── dvc_motor_dji.cpp/h # DJI电机(M6020/C610/C620) │ ├── dvc_motor_dm.cpp/h # 达妙电机 │ ├── dvc_motor_rs.cpp/h # 灵足电机 │ ├── dvc_crsf.cpp/h # CRSF遥控器协议 │ ├── dvc_sbus.cpp/h # SBUS遥控器协议 │ ├── dvc_minipc.cpp/h # miniPC上位机协议 │ ├── dvc_BRT.cpp/h # BRT编码器 │ ├── dvc_dt35.cpp/h # DT35距离传感器 │ └── dvc_airtool.cpp/h # 气阀/气泵控制 │ ├── User_chariot/ │ ├── crt_chassis.cpp/h # 全向轮底盘控制 │ ├── crt_lift.cpp/h # 抬升机构控制 │ ├── crt_weapon_head.cpp/h # 武器头控制 │ └── crt_arm.cpp/h # 机械臂控制 │ ├── User_alg/ │ ├── alg_pid.cpp/h # PID控制器 │ ├── alg_slope.cpp/h # 斜坡函数 │ ├── alg_fsm.cpp/h # 有限状态机 │ └── alg_stall.cpp/h # 堵转检测 │ └── User_ita/ ├── ita_robot.cpp/h # 人机交互控制逻辑 └── tsk_config_and_callback.cpp # 任务调度与回调配置 ## 使用说明 ## ### 遥控器控制(CRSF) ### 遥控器驱动有SBUS与CRSF,最后选用CRSF进行调试 若当前活动控制器为CRSF 1. SD为底盘使能开关,SD为HIGH(实为按下)时底盘为FLLOW,为LOW时底盘为DISABLE 2. 左摇杆 X:底盘旋转(ω) 右摇杆 X:底盘 Y 方向速度 右摇杆 Y:底盘 X 方向速度 ### MiniPC控制(USB) ### 若当前活动控制前为MiniPC 1. CRSF遥控上预留了一个安全开关,在MiniPC状态为ENABLE时,也可以通过按下SA(HIGH)使得底盘失能,后续接入其他指令后遥控器介入可更改 2. 目前的通信指令如下,发送过来的原始数据类型均为uint16_t 指令 含义 参数 cmdv\0 速度控制 vx:X轴速度,vy:Y轴速度,vw:角速度 upst\0 上台阶准备 无 dnst\0 下台阶准备 无 takk\0 拿 KFS dx:距离偏移 y与w的正负共同决定执行高度 thok\0 扔 KFS(向背后) dx:距离偏移 y与w的正负共同决定执行高度 twph\0 拿武器头 无 putk\0 放 KFS 无 指令参数说明(takk / thok) 根据 y 与 w 的组合决定放置/取出的层数: y 符号 w 符号 含义 >0 >0 高两层 >0 <0 高一层 <0 >0 低一层 <0 <0 低两层 ### 开发环境 ### IDE:Visual Studio Code(EIDE 插件)/ Keil MDK 编译器:ARM Compiler version 6(AC6) 调试器:J-Link STM32CubeMX:用于外设初始化与时钟配置 ### 工程配置说明 ### 使用 EIDE 时,请确保工具链路径指向 ARM Compiler 6 安装目录 使用 Keil MDK 时,需安装对应的 STM32H7 器件支持包 J-Link 连接 SWD 接口进行烧录与调试 ## 具体模块解析 ## 具体的模块解析见