# armor-icore3-usb **Repository Path**: mudash/armor-icore3-usb ## Basic Information - **Project Name**: armor-icore3-usb - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-26 - **Last Updated**: 2026-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # iCore3 USB 固件项目 ## 项目简介 iCore3 USB 是一个基于 STM32F407IGT6 微控制器和 Altera Cyclone IV FPGA 的嵌入式系统项目,实现了通过 USB CDC(虚拟串口)进行设备控制、状态监测和固件升级的完整解决方案。项目包含 ARM 固件(Bootloader + Application)、FPGA 程序和 PC 上位机软件三部分。 ## 硬件平台 主控芯片采用 STM32F407IGT6,基于 ARM Cortex-M4F 内核,主频 168MHz,内置 1MB Flash 和 192KB SRAM。FPGA 芯片为 Altera Cyclone IV EP4CE6E144I7,负责高速电机编码器接口、PWM 波形生成和传感器数据采集等实时任务。USB 接口采用全速设备模式,通过 VIN+、VIN- 直接连接至 USB 控制器,实现虚拟串口通信。 ## 软件架构 ### ARM 固件结构 Bootloader 部分位于 `ARM/Bootloader` 目录,负责系统上电自检、应用固件校验和 USB 升级模式切换。Bootloader 支持通过 USB CDC 协议接收新的固件数据,写入 Flash 指定区域后进行 CRC32 校验,确保固件完整性。应用固件位于 `ARM/Application` 目录,基于 FreeRTOS 实时操作系统构建,包含通信、控制和传感器三个主要任务。 FreeRTOS 任务配置如下:通信任务(COMM)优先级最高,负责 USB 数据收发和协议解析;控制任务(CONTROL)处理电机控制指令和状态反馈;传感器任务(SENSOR)定期采集编码器和传感器数据。系统心跳由 SysTick 提供,频率配置为 1000Hz。 ### FPGA 程序结构 FPGA 代码位于 `FPGA` 目录,主要模块包括: - `quad_encoder.v`:四倍频正交解码模块,负责电机编码器信号处理 - `pwm_12.v`:12 通道 PWM 波形发生器,支持占空比和频率独立配置 - `Write_sensor.v / Write_coder.v`:传感器和编码器数据采集接口 - `ram_3.v / circle_fifo.v`:数据缓存和 FIFO 管理 - `decoding_crc.v`:CRC 校验模块 ### PC 上位机软件 PC 软件位于 `PC` 目录,包含: - `Lib`:USB CDC 跨平台库,支持 Windows(WinUSB)和 Linux(libusb) - `GUI`:Qt5 编写的图形界面,提供设备连接、状态监控、参数配置和固件升级功能 ## 功能特性 ### 通信协议 USB CDC 消息帧采用固定格式:帧头(2 字节)、长度(2 字节)、命令码(1 字节)、数据域(N 字节)、CRC32 校验(4 字节)。支持的命令包括 PWM 设置、传感器读取、编码器获取、脉冲输出等控制指令,以及固件升级相关的初始化、数据传输和校验命令。 ### 固件升级 系统支持通过 USB 进行在线升级(OTA),升级流程包括初始化、开始、传输数据、结束、校验和重启六个阶段。可分别对 ARM 固件和 FPGA .bit 位流文件进行升级,升级过程中自动计算 CRC32 校验,并在完成后验证固件完整性。 ### 电机控制 通过 FPGA 实现的四倍频正交解码支持高精度电机位置反馈,配合 PWM 输出模块可实现闭环速度控制和位置控制。系统支持多通道电机同时控制,每通道可独立配置脉冲数、方向和使能状态。 ## 编译说明 ### 环境要求 编译 ARM 固件需要 ARM GNU Toolchain(arm-none-eabi-gcc)和 GNU Make 工具。FPGA 编译需要 Quartus II 13.0 以上版本。PC 软件编译需要 CMake、Qt5 开发库和 libusb 或 WinUSB 开发文件。 详细的环境配置步骤请参考 `ARM/COMPILATION_GUIDE.md` 文档。 ### 编译命令 在 `ARM` 目录下执行: ```bash # Windows (PowerShell) .\build.ps1 # Linux/macOS (Bash) ./build.sh # 使用 Make make all # 编译全部 make bootloader # 仅编译 Bootloader make application # 仅编译 Application make clean # 清理输出文件 ``` 编译完成后,输出文件位于 `ARM/Output/Bootloader` 和 `ARM/Output/Application` 目录,分别生成 .bin、.hex 和 .elf 文件。 ## 烧录说明 ### Flash 地址映射 Flash 空间划分为三个区域:Bootloader 占用 0x08000000 起始的 32KB 空间;Application 固件从 0x08008000 开始,大小约 480KB;升级数据缓冲区位于 0x0807C000 起始的 16KB 空间。 ### 烧录方法 使用 ST-Link 配合 st-flash 工具烧录: ```bash # 烧录 Bootloader st-flash write Output/Bootloader/bootloader.bin 0x08000000 # 烧录 Application st-flash write Output/Application/application.bin 0x08008000 ``` 或使用 OpenOCD 进行烧录和调试。详细的烧录步骤和 OpenOCD 配置请参考 `ARM/README.md` 文档。 ## 目录结构 ``` iCore3-USB/ ├── ARM/ # ARM 固件源码 │ ├── Application/ # 应用程序 │ │ ├── BSP/ # 板级支持包 │ │ ├── Core/ # 核心逻辑 │ │ └── USB/ # USB CDC 实现 │ ├── Bootloader/ # 引导程序 │ ├── Common/ # 公共文件 │ ├── Drivers/ # STM32 HAL 驱动 │ ├── FreeRTOS/ # FreeRTOS 源码 │ └── Output/ # 编译输出 ├── FPGA/ # FPGA 源码 │ ├── Project/ # Quartus 项目文件 │ └── Verilog/ # Verilog 源文件 └── PC/ # PC 上位机软件 ├── GUI/ # Qt 图形界面 └── Lib/ # USB CDC 库 ``` ## 版本历史 - **v1.0.0** - 初始版本发布 ## 许可证 本项目仅供学习和研究使用。 ## 联系方式 如有问题或建议,请通过项目 Issues 页面反馈。