一、硬件平台配置(STM32H743VIT6)
1.1 核心硬件资源
模块 | 型号/参数 | 接口 | 功能 |
---|---|---|---|
主控芯片 | STM32H743VIT6 | - | Cortex-M7@480MHz, 2MB Flash, 1MB RAM |
PWM控制器 | PCA9685 | I2C1 | 16通道12位PWM输出 |
舵机系统 | 5×MG996R舵机 | PWM0-PWM4 | 支持位置控制(0.5-2.5ms脉冲) |
显示模块 | 0.96" OLED SSD1306 | I2C2 | 128×64分辨率 |
手柄接收器 | PS2无线接收器 | SPI2 | 支持双摇杆+12按键 |
CAN FD接口 | TJA1043GT/3 | FDCAN1 | 支持5Mbps数据传输 |
调试接口 | ST-Link V3 | SWD | 程序烧录与调试 |
电源管理 | MP9943 | I2C3 | 支持动态调压(3.3V-12V) |
1.2 系统架构拓扑
二、软件分层架构设计
2.1 整体架构
text
├── 硬件抽象层 (HAL) │ ├── STM32CubeMX配置 │ ├── 外设驱动(I2C/SPI/CAN) ├── 实时操作系统层 (FreeRTOS) │ ├── 任务调度 │ ├── 内存管理 ├── Micro-ROS中间件 │ ├── 传输层适配 │ ├── ROS2接口 ├── 设备驱动层 │ ├── PCA9685驱动 │ ├── SSD1306驱动 │ ├── PS2手柄驱动 ├── 应用层 │ ├── 舵机控制 │ ├── 手柄处理 │ ├── 姿态解算 │ ├── OLED显示
2.2 内存分配方案
区域 | 地址范围 | 大小 | 用途 |
---|---|---|---|
Flash | 0x08000000 | 1.5MB | 固件存储 |
DTCM RAM | 0x20000000 | 128KB | FreeRTOS内核 |
AXI SRAM | 0x24000000 | 512KB | 应用数据 |
SRAM4 | 0x38000000 | 64KB | Micro-ROS通信缓冲区 |
2.3 FreeRTOS任务配置
任务名称 | 优先级 | 栈大小 | 功能 |
---|---|---|---|
MicroROS_Task | 5 | 6KB | ROS2通信 |
ServoCtrl_Task | 6 | 3KB | 舵机PWM控制 |
PS2Handle_Task | 4 | 2KB | 手柄处理 |
Kinematics_Task | 3 | 5KB | 姿态解算 |
OLEDDisplay_Task | 2 | 2KB | 显示刷新 |
CANFD_Task | 7 | 3KB | CAN通信 |
三、Micro-ROS与FreeRTOS适配实现
3.1 移植关键步骤
-
自定义传输层实现
c
// custom_transport.c
bool cubemx_transport_open(struct uxrCustomTransport* transport) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)transport->args; return HAL_UART_Init(huart) == HAL_OK; } bool cubemx_transport_write(struct uxrCustomTransport* transport, const uint8_t* buf, size_t len, uint8_t* errcode) { UART_HandleTypeDef* huart = (UART_HandleTypeDef*)transport->args; HAL_StatusTypeDef ret