Files
hm fc10ef2e10 Initial commit: LSPi (LiangShanPi) project
GD32F470ZGT6 based project with full peripheral support:
- SDRAM (W9825G6KH) via EXMC
- LCD NT35510 (480x800) via EXMC NOR/PSRAM
- Flash (W25Q64) via SPI
- UART (USART0) debug console
- LED indicators
- CMSIS-DAP debug interface
- CMake + ARM GCC toolchain build system
2026-04-26 16:24:42 +08:00

633 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
***
name: "download-lib"
description: "下载嵌入式开发所需的库文件(STM32/GD32/CH32等)。在创建新工程、更新库版本、切换芯片平台或需要确保团队库版本一致时调用此技能。"
version: 1.1.0
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# DOWNLOAD-LIB 技能
该技能用于自动化下载嵌入式开发所需的硬件库文件,支持多种微控制器平台,并提供完整的工程集成方案。
## 技能概述
`download-lib` 技能是一个嵌入式开发辅助工具,专门用于管理和下载微控制器硬件外设库。它解决了嵌入式开发中常见的库文件管理问题:
- 不同芯片平台的库文件获取
- 库版本管理和一致性
- 工程集成自动化
- 团队协作中的库同步
## 功能特点
### 支持的平台
- **STM32系列**STM32F0/F1/F2/F3/F4/F7/H7等全系列
- **GD32系列**GD32F1/F2/F3/F4/F5等全系列
- **CH32系列**CH32V/V3/F1/F2等全系列
- **其他ARM Cortex-M系列MCU**
### 核心功能
1. **智能下载**:自动识别芯片型号并下载对应的库文件
2. **版本管理**:支持特定版本、最新版本和版本锁定
3. **完整性校验**:下载后验证文件完整性(MD5/SHA256)
4. **工程集成**:自动更新构建系统(CMake/Makefile
5. **离线支持**:支持本地缓存和离线安装模式
## 调用时机
在以下情况下调用此技能:
### 1. 新工程创建
- 创建基于STM32/GD32/CH32的新嵌入式项目时
- 需要快速建立工程框架和依赖库时
### 2. 库版本更新
- 需要更新现有工程的外设库到新版本时
- 修复已知bug或使用新特性时
### 3. 平台迁移
- 项目从一种MCU迁移到另一种MCU时
- 需要同时支持多种芯片平台时
### 4. 团队协作
- 确保团队成员使用相同的库版本时
- 新成员快速搭建开发环境时
### 5. 离线开发准备
- 准备离线开发环境,预先下载所有依赖库
- 为无网络环境准备开发包时
## 工作流程
### 完整工作流程
```mermaid
graph TD
A[用户请求下载库文件] --> B{芯片类型选择}
B --> C[STM32]
B --> D[GD32]
B --> E[CH32]
C --> F[选择具体系列]
D --> F
E --> F
F --> G[选择版本号]
G --> H[选择下载源]
H --> I[执行下载]
I --> J[完整性校验]
J --> K[工程集成]
K --> L[生成报告]
L --> M[完成]
```
### 详细步骤
#### 步骤1:参数收集
1. **芯片类型**:用户选择目标芯片平台(STM32/GD32/CH32
2. **芯片系列**:指定具体芯片系列(如GD32F450、STM32F407等)
3. **库版本**:选择库版本号(如v1.0.0、latest等)
4. **下载源**:选择下载来源(官方GitHub、厂商网站、镜像站等)
5. **目标目录**:指定库文件存放位置(默认:`项目根目录/libs/`
#### 步骤2:库文件下载
1. **源地址解析**:根据芯片类型和版本构建下载URL
- STM32`https://github.com/STMicroelectronics/STM32CubeF4`
- GD32`https://github.com/GigaDevice/GD32F4xx_Standard_Peripheral_Lib`
- CH32`https://github.com/openwch/ch32`(示例)
2. **下载方式**
- Git clone(推荐,支持版本管理)
- 直接下载ZIP包
- 使用wget/curl命令行工具
3. **进度显示**:实时显示下载进度和状态
#### 步骤3:文件处理
1. **解压与整理**:如有需要,解压文件并整理目录结构
2. **文件筛选**:只保留必要的库文件,移除示例、文档等非必需文件
3. **目录规范化**:按照标准目录结构组织文件
```
libs/
├── CMSIS/ # ARM CMSIS核心库
├── thirdparty/
│ └── GD32F4xx/ # 具体芯片的外设库
│ ├── Include/
│ ├── Source/
│ └── README.md
└── version.txt # 版本信息文件
```
#### 步骤4:完整性校验
1. **哈希校验**:计算下载文件的MD5或SHA256值
2. **大小验证**:检查文件大小是否符合预期
3. **结构验证**:验证目录结构是否完整
4. **关键文件检查**:确保核心头文件和源文件存在
#### 步骤5:工程集成
1. **构建系统更新**
- **CMake**:更新`CMakeLists.txt`,添加库文件路径
- **Makefile**:更新编译规则和包含路径
- **Keil/IAR**:生成对应的工程文件(可选)
2. **头文件路径配置**:自动添加必要的头文件搜索路径
3. **依赖关系配置**:设置库文件之间的依赖关系
#### 步骤6:报告生成
1. **下载摘要**:显示下载的文件数量、大小和时间
2. **版本信息**:记录下载的库版本和芯片信息
3. **集成状态**:显示工程集成是否成功
4. **问题提示**:如有问题,提供解决方案建议
## 参数定义
### 输入参数
```yaml
# 必选参数
chip_type: # 芯片类型
type: enum
values: [stm32, gd32, ch32, other]
required: true
chip_series: # 芯片系列
type: string
examples: ["GD32F450", "STM32F407", "CH32V307"]
required: true
# 可选参数
library_version: # 库版本
type: string
default: "latest"
examples: ["v1.0.0", "v2.1.3", "latest"]
download_source: # 下载源
type: enum
values: [github, official, custom]
default: "github"
target_directory: # 目标目录
type: string
default: "./libs/"
skip_integration: # 跳过工程集成
type: boolean
default: false
offline_mode: # 离线模式
type: boolean
default: false
description: "从本地缓存安装,无需网络"
```
### 输出结果
```yaml
success: true/false
message: "操作结果描述"
downloaded_files:
count: 42
total_size: "15.7MB"
duration: "45秒"
library_info:
name: "GD32F4xx Standard Peripheral Library"
version: "v1.0.0"
chip: "GD32F450VG"
release_date: "2023-06-15"
integration_status:
cmake_updated: true
include_paths_added: ["libs/thirdparty/GD32F4xx/Include"]
source_files_added: ["libs/thirdparty/GD32F4xx/Source/*.c"]
```
## 示例和模板
### 示例1:下载GD32F4xx库
```bash
# 通过技能调用下载GD32F4xx最新版本
download-lib --chip-type gd32 --chip-series GD32F450 --version latest
```
**执行结果**
```
✅ 开始下载GD32F4xx库...
📦 下载源:https://github.com/GigaDevice/GD32F4xx_Standard_Peripheral_Lib
🔍 选择版本:latest (v1.0.0)
⬇️ 下载中:15.7MB [██████████] 100%
✅ 下载完成:42个文件,耗时45秒
🔒 完整性校验:通过(SHA256匹配)
📁 文件组织:libs/thirdparty/GD32F4xx/
🛠️ 工程集成:CMakeLists.txt已更新
📊 报告生成:download_report_20250409_142356.json
🎉 完成!GD32F450库已就绪。
```
### 示例2:下载特定版本的STM32库
```bash
# 下载STM32F4xx v1.27.0版本
download-lib \
--chip-type stm32 \
--chip-series STM32F407 \
--version v1.27.0 \
--target-directory ./vendor/stm32 \
--skip-integration
```
### 示例3:离线模式(从缓存安装)
```bash
# 从本地缓存安装,无需网络连接
download-lib \
--chip-type gd32 \
--chip-series GD32F450 \
--offline-mode \
--cache-directory ~/.cache/embedded-libs
```
### 模板1Bash下载脚本
```bash
#!/bin/bash
# download_library.sh - 库文件下载脚本模板
set -e # 出错时退出
# 配置参数
CHIP_TYPE=${1:-gd32}
CHIP_SERIES=${2:-GD32F450}
VERSION=${3:-latest}
TARGET_DIR=${4:-./libs}
CACHE_DIR="${HOME}/.cache/embedded-libs"
# 下载URL映射
declare -A LIBRARY_URLS=(
["gd32"]="https://github.com/GigaDevice/GD32F4xx_Standard_Peripheral_Lib"
["stm32_f4"]="https://github.com/STMicroelectronics/STM32CubeF4"
["ch32_v"]="https://github.com/openwch/ch32"
)
# 获取下载URL
get_download_url() {
local chip=$1
local series=$2
case $chip in
"gd32")
echo "${LIBRARY_URLS[gd32]}"
;;
"stm32")
# 根据系列选择具体的STM32库
if [[ $series == STM32F4* ]]; then
echo "${LIBRARY_URLS[stm32_f4]}"
else
echo "错误:不支持的STM32系列: $series" >&2
exit 1
fi
;;
*)
echo "错误:不支持的芯片类型: $chip" >&2
exit 1
;;
esac
}
# 主函数
main() {
echo "🔍 芯片: $CHIP_TYPE $CHIP_SERIES"
echo "📦 版本: $VERSION"
# 创建目标目录
mkdir -p "$TARGET_DIR"
# 获取下载URL
DOWNLOAD_URL=$(get_download_url "$CHIP_TYPE" "$CHIP_SERIES")
echo "🌐 下载源: $DOWNLOAD_URL"
# 执行下载
if [[ "$VERSION" == "latest" ]]; then
git clone --depth 1 "$DOWNLOAD_URL" "${TARGET_DIR}/temp"
else
git clone --branch "$VERSION" --depth 1 "$DOWNLOAD_URL" "${TARGET_DIR}/temp"
fi
# 整理文件
organize_files
# 清理临时文件
rm -rf "${TARGET_DIR}/temp"
echo "✅ 下载完成"
}
# 文件整理函数
organize_files() {
local temp_dir="${TARGET_DIR}/temp"
# GD32库的特殊处理
if [[ "$CHIP_TYPE" == "gd32" ]]; then
# 复制必要的文件
mkdir -p "${TARGET_DIR}/thirdparty/GD32F4xx"
cp -r "${temp_dir}/Firmware/GD32F4xx_standard_peripheral/Include" \
"${TARGET_DIR}/thirdparty/GD32F4xx/"
cp -r "${temp_dir}/Firmware/GD32F4xx_standard_peripheral/Source" \
"${TARGET_DIR}/thirdparty/GD32F4xx/"
fi
# 添加其他芯片类型的处理逻辑...
}
# 执行主函数
main "$@"
```
### 模板2CMake集成配置
```cmake
# CMakeLists.txt - 库集成模板
cmake_minimum_required(VERSION 3.16)
# 检测库文件是否存在
macro(check_required_library lib_name lib_path)
if(NOT EXISTS ${lib_path})
message(WARNING "缺少库文件: ${lib_name}")
message(STATUS "请运行: download-lib --chip-type gd32 --chip-series GD32F450")
set(${lib_name}_FOUND FALSE)
else()
set(${lib_name}_FOUND TRUE)
message(STATUS "找到库: ${lib_name}")
endif()
endmacro()
# 检查GD32库
check_required_library(GD32F4XX_LIB "${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx")
if(GD32F4XX_LIB_FOUND)
# 添加包含路径
include_directories(
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Include
${CMAKE_SOURCE_DIR}/libs/CMSIS/Core/Include
${CMAKE_SOURCE_DIR}/libs/CMSIS/GD/GD32F4xx/Include
)
# 添加源文件
file(GLOB GD32_SOURCES
${CMAKE_SOURCE_DIR}/libs/thirdparty/GD32F4xx/Source/*.c
)
# 添加到工程源文件列表
list(APPEND PROJECT_SOURCES ${GD32_SOURCES})
endif()
# 类似的,可以添加其他库的检查
```
### 模板3Python下载脚本
```python
#!/usr/bin/env python3
# download_lib.py - Python版本库下载器
import os
import sys
import requests
import hashlib
import zipfile
import json
from pathlib import Path
class LibraryDownloader:
"""库文件下载器"""
def __init__(self, chip_type, chip_series, version="latest"):
self.chip_type = chip_type
self.chip_series = chip_series
self.version = version
self.base_urls = {
"gd32": "https://api.github.com/repos/GigaDevice/GD32F4xx_Standard_Peripheral_Lib",
"stm32": "https://api.github.com/repos/STMicroelectronics/STM32CubeF4",
}
def download(self, target_dir="libs"):
"""执行下载"""
print(f"下载 {self.chip_type} {self.chip_series} 库...")
# 获取下载信息
download_info = self.get_download_info()
# 创建目标目录
target_path = Path(target_dir)
target_path.mkdir(parents=True, exist_ok=True)
# 下载文件
self.download_file(download_info['url'], target_path)
# 验证完整性
if self.verify_integrity(target_path, download_info.get('checksum')):
print("✅ 完整性验证通过")
else:
print("⚠️ 完整性验证失败")
# 生成版本文件
self.generate_version_file(target_path, download_info)
return True
def get_download_info(self):
"""获取下载信息"""
# 这里实现具体的API调用逻辑
# 返回包含url、version、checksum等信息的字典
pass
# 其他方法实现...
if __name__ == "__main__":
# 使用示例
downloader = LibraryDownloader("gd32", "GD32F450", "latest")
downloader.download()
```
## 错误处理
### 常见错误及解决方案
#### 错误1:网络连接失败
```
❌ 错误:无法连接到下载服务器
```
**可能原因**
- 网络连接问题
- 下载源URL变更
- 防火墙或代理限制
**解决方案**
1. 检查网络连接
2. 使用镜像源:`--download-source mirror`
3. 离线模式:`--offline-mode --cache-dir /path/to/cache`
4. 手动下载并指定本地路径
#### 错误2:版本不存在
```
❌ 错误:版本 v2.5.0 不存在
```
**可能原因**
- 版本号输入错误
- 该版本已被删除
- 芯片系列不支持该版本
**解决方案**
1. 查看可用版本:`download-lib --list-versions gd32 GD32F450`
2. 使用最新版本:`--version latest`
3. 指定正确的版本格式
#### 错误3:磁盘空间不足
```
❌ 错误:磁盘空间不足,需要 200MB,可用 50MB
```
**解决方案**
1. 清理磁盘空间
2. 指定其他存储位置:`--target-directory /mnt/external/libs`
3. 仅下载必要文件:`--minimal`(只下载核心库文件)
#### 错误4:权限不足
```
❌ 错误:无法创建目录 /usr/local/libs,权限被拒绝
```
**解决方案**
1. 使用用户目录:`--target-directory ~/projects/libs`
2. 使用sudo权限(谨慎)
3. 更改目录权限
### 错误恢复机制
#### 断点续传
```bash
# 支持断点续传
download-lib --resume --partial-dir ./download-tmp
```
#### 完整性恢复
```bash
# 如果下载中断,可以恢复完整性检查
download-lib --verify-only --repair
```
## 最佳实践
### 1. 版本锁定
```bash
# 在生产环境中使用固定版本
download-lib --chip-type gd32 --chip-series GD32F450 --version v1.0.0
```
### 2. 团队一致性
```bash
# 创建版本锁定文件
download-lib --generate-lockfile > library-lock.json
# 其他成员使用锁文件恢复
download-lib --from-lockfile library-lock.json
```
### 3. CI/CD集成
```yaml
# .gitlab-ci.yml 示例
stages:
- setup
setup_libraries:
stage: setup
script:
- download-lib --chip-type gd32 --chip-series GD32F450 --version latest
- download-lib --chip-type stm32 --chip-series STM32F103 --version v1.8.0
artifacts:
paths:
- libs/
expire_in: 30 days
```
### 4. 离线开发环境
```bash
# 在可联网环境中准备离线包
download-lib --chip-type gd32 --chip-series GD32F450 --bundle --output gd32-bundle.tar.gz
# 在离线环境中安装
download-lib --install-bundle gd32-bundle.tar.gz
```
## 扩展功能
### 插件系统
支持通过插件扩展新的芯片平台:
```bash
# 注册新的芯片支持
download-lib --register-chip \
--name AT32 \
--url-template "https://github.com/ArteryTek/AT32F4xx_Library" \
--file-structure "Firmware/AT32F4xx_standard_peripheral"
```
### 自定义下载源
```bash
# 使用自定义的下载源
download-lib \
--chip-type gd32 \
--download-source custom \
--custom-url "http://internal-mirror.company.com/gd32-libs"
```
### 批量操作
```bash
# 批量下载多个库
download-lib --batch libraries.json
```
**libraries.json**:
```json
{
"libraries": [
{
"chip_type": "gd32",
"chip_series": "GD32F450",
"version": "latest"
},
{
"chip_type": "stm32",
"chip_series": "STM32F103",
"version": "v1.8.0"
}
]
}
```
## 与当前工程的集成示例
### ServoTest工程集成
对于您的`ServoTest`工程(基于GD32F450VG),技能可以:
1. **确保库版本一致**
```bash
# 检查当前库版本
download-lib --check-version --chip-type gd32 --chip-series GD32F450
# 更新到指定版本
download-lib --chip-type gd32 --chip-series GD32F450 --version v1.0.0
```
2. **多平台支持**
```bash
# 如果需要支持STM32作为备选平台
download-lib --chip-type stm32 --chip-series STM32F407 --target-directory ./libs/stm32-backup
```
3. **依赖管理**
```bash
# 生成依赖报告
download-lib --dependencies --output deps.html
```
## 更新日志
### v1.1.0 (2024-04-09)
- 完全重写技能文档
- 添加详细的工作流程和参数定义
- 提供多个示例脚本和模板
- 完善错误处理和最佳实践
- 添加与ServoTest工程的集成示例
### v1.0.0 (初始版本)
- 基础技能框架
- 支持STM32/GD32/CH32芯片
- 基本的下载功能
---
**技能维护者**:嵌入式系统开发团队
**最后更新**2024-04-09
**技能状态**:✅ 生产就绪