在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用knowledge-query
星标5
分支0
更新时间2026年5月31日 13:43
知识库检索引擎——查询芯片手册、通信协议、传感器参数与错误码诊断
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
知识库检索引擎——查询芯片手册、通信协议、传感器参数与错误码诊断
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
设备交互智能体——扫描、连接、操纵物理开发板与嵌入式Linux板卡
板卡管理器——管理板卡配置、端口别名、外设清单与踩坑记录
嵌入式全流程开发助手——从MCU选型到固件烧录的全链路支持
硬件调试专家——串口监听、波形分析、故障定位与寄存器级调试
技能提炼器——从调试会话中提取可复用技能,整合记忆并自我优化
基于 SOC 职业分类
| name | knowledge-query |
| description | 知识库检索引擎——查询芯片手册、通信协议、传感器参数与错误码诊断 |
| metadata | {"type":"skill"} |
用户提出以下任一问题时触发:
查询分类与示例:
存储器映射查询:
问:STM32F407VGT6 的 Flash 和 RAM 基址?
答:Flash: 0x08000000 (1MB),RAM: 0x20000000 (128KB SRAM1) + 0x2001C000 (64KB CCM RAM)
总线拓扑查询:
问:TIM1 挂载在哪条总线?
答:TIM1 挂载在 APB2 上,最大时钟频率 168MHz (APB2 定时器时钟 = APB2 × 2 当 APB2 预分频 ≠ 1)
外设时钟源查询:
问:STM32F4 的 USART1 时钟源可选哪些?
答:
- PCLK2 (APB2, 默认)
- SYSCLK
- HSI (16MHz)
- LSE (32.768kHz)
选择通过 RCC_DCKCFGR2 寄存器的 USART1SEL 位配置
中断向量表查询:
问:EXTI Line 0 的中断号是多少?
答:EXTI0_IRQn = 6 (STM32F4 系列)
中断向量表偏移:0x0000_0058
支持的芯片系列(按手册版本索引):
| 系列 | 参考手册编号 | 核心技术文档 |
|---|---|---|
| STM32F1 | RM0008 | Cortex-M3, 72MHz |
| STM32F4 | RM0090 (F405/F407/F415/F417), RM0383 (F427/F437), RM0368 (F401) | Cortex-M4, 168MHz |
| STM32G4 | RM0440 | Cortex-M4, 170MHz, 数学加速器 |
| STM32H7 | RM0433 (单核), RM0399 (双核) | Cortex-M7+M4, 480MHz |
| STM32L4 | RM0351 | Cortex-M4, 80MHz, 超低功耗 |
| ESP32 | ESP32 技术参考手册 v4.5+ | Xtensa LX6, 240MHz |
| ESP32-S3 | ESP32-S3 技术参考手册 v1.0+ | Xtensa LX7, 240MHz |
| GD32F103 | GD32F103 用户手册 v2.1+ | Cortex-M3, 108MHz |
| GD32F303 | GD32F303 用户手册 v1.1+ | Cortex-M4, 120MHz |
在本地手册未命中时,主动建议用户从以下地址获取手册:
I2C 协议参数速查:
| 参数 | 标准模式 (Sm) | 快速模式 (Fm) | 快速增强模式 (Fm+) | 高速模式 (Hs) |
|---|---|---|---|---|
| SCL 时钟频率 | 0-100 kHz | 0-400 kHz | 0-1 MHz | 0-3.4 MHz |
| 上升时间 t_r (max) | 1000 ns | 300 ns | 120 ns | 160/80 ns |
| SDA 数据建立时间 t_SU;DAT | 250 ns | 100 ns | 50 ns | 10 ns |
| START 保持时间 t_HD;STA | 4.0 μs | 0.6 μs | 0.26 μs | 0.16 μs |
| STOP 建立时间 t_SU;STO | 4.0 μs | 0.6 μs | 0.26 μs | 0.16 μs |
| 总线电容 (max) | 400 pF | 400 pF | 550 pF | 400/100 pF |
| 上拉电阻典型值 (3.3V) | 4.7 kΩ | 2.2 kΩ | 1.0 kΩ | — |
| 低电平噪声容限 | 0.3VDD | 0.3VDD | 0.3VDD | 0.1VDD |
上拉电阻精确计算:
Rp(min) = (VDD - V_OL,max) / I_OL
= (3.3 - 0.4) / 0.003 = 967 Ω (取 I_OL=3mA)
Rp(min) = (3.3 - 0.4) / 0.006 = 483 Ω (取 I_OL=6mA)
Rp(max) = t_r / (0.8473 × C_b)
= 300e-9 / (0.8473 × 400e-12) = 885 Ω (快速模式, 300ns 上升时间)
= 1000e-9 / (0.8473 × 400e-12) = 2953 Ω (标准模式, 1000ns 上升时间)
实际选择: max(Rp(min), 标准值) 与 Rp(max) 之间
典型安全值: 标准模式 4.7kΩ, 快速模式 2.2kΩ
SPI 参数速查:
| 参数 | 约束 |
|---|---|
| SCK 最大频率 | min{MCU_SPI_CLK/2, 从设备手册最大值} |
| Mode 0 (CPOL=0, CPHA=0) | SCK 空闲低,第一个边沿(上升)采样 |
| Mode 1 (CPOL=0, CPHA=1) | SCK 空闲低,第二个边沿(下降)采样 |
| Mode 2 (CPOL=1, CPHA=0) | SCK 空闲高,第一个边沿(下降)采样 |
| Mode 3 (CPOL=1, CPHA=1) | SCK 空闲高,第二个边沿(上升)采样 |
| t_CS_SCK (CS 到第一个 SCK) | 通常 ≥ 1/2 SCK 周期 |
| t_SCK_CS (最后一个 SCK 到 CS 释放) | 通常 ≥ 1/2 SCK 周期 |
| 数据位宽 | 8-bit 或 16-bit(Motorola 格式),部分设备支持 4-32 bit |
| LSB/MSB 优先 | 绝大多数为 MSB 优先 |
| NSS 管理 | 硬件 NSS(自动拉低/释放)vs 软件 NSS(GPIO 手动控制) |
UART 波特率计算(STM32F4 为例):
USARTDIV = f_CK / (16 × BaudRate)
示例: f_CK = 84MHz (APB2), BaudRate = 115200
USARTDIV = 84000000 / (16 × 115200) = 45.572
DIV_Mantissa = 45 (整数部分写入 BRR[15:4])
DIV_Fraction = round(0.572 × 16) = 9 (小数部分写入 BRR[3:0])
即 BRR = 0x2D9
实际波特率 = 84000000 / (16 × 45.5625) = 115205
误差 = |115205 - 115200| / 115200 = 0.004% ✓ (远小于 2%)
CAN 波特率计算:
CAN 位时间 = 1 / BaudRate
= Tq × (1 + BS1 + BS2)
Tq = (BRP + 1) / f_CAN_CLK
示例: f_CAN_CLK = 42MHz (APB1), 目标 1Mbps
位时间 = 1μs = Tq × (1 + BS1 + BS2)
取 BRP = 2 → Tq = 3/42MHz = 71.4ns
N_Tq = 1μs / 71.4ns ≈ 14 Tq
分配: BS1 = 11, BS2 = 2, SJW = 1
1 + 11 + 2 = 14 Tq = 14 × 71.4ns = 1.0μs = 1Mbps ✓
采样点 = (1 + BS1) / (1 + BS1 + BS2) = 12/14 = 85.7% (推荐范围 75-90%)
常用传感器速查:
MPU6050 / MPU9250 (TDK InvenSense):
| 参数 | 值 |
|---|---|
| I2C 地址 | 0x68 (AD0=GND) 或 0x69 (AD0=VDD) |
| WHO_AM_I 寄存器 | 0x75 → 应返回 0x68 (MPU6050) 或 0x71 (MPU9250) |
| 陀螺量程 | ±250/±500/±1000/±2000 °/s (寄存器 0x1B) |
| 加速度计量程 | ±2/±4/±8/±16 g (寄存器 0x1C) |
| 采样率 | 由 SMPLRT_DIV (0x19) 控制, f_sample = 1kHz / (1 + SMPLRT_DIV) |
| DLPF 带宽 | 寄存器 0x1A 设置: 0=260Hz, 1=184Hz, 2=94Hz, 3=44Hz, 4=21Hz, 5=10Hz, 6=5Hz |
| 上电初始化 | 写 0x00 到 PWR_MGMT_1 (0x6B) 唤醒,等待 PLL 稳定 100ms |
| 数据转换 | accel_g = raw × FS / 32768, gyro_dps = raw × FS / 32768 |
| 常见坑 | 直接断电再上电可能卡死 → 在 PWR_MGMT_1 写 0x80 做 Device Reset |
VL53L0X (ST ToF 测距):
| 参数 | 值 |
|---|---|
| I2C 地址 | 0x29(默认,出厂配置),XSHUT 拉低可改址 |
| 测量范围 | 30mm ~ 2000mm(白色目标,暗环境) |
| 精度 | ±3% (近距离), ±5-10% (远距离) |
| XSHUT 引脚 | 必须拉高才能工作,用于多传感器分时使能 |
| 上电时序 | AVDD → AVDDVCSEL 之间需等待 ≥ 1.2ms |
| 初始化流程 | 上电 → 等待 boot → 加载校准数据 → 配置测量参数 → RefSPAD 校准 → 开始测距 |
| 常见坑 | 盖片透过率不足导致远距失效 → 需提高 VCSEL 驱动电流或更换高透盖片 |
BME280 (Bosch 环境传感器):
| 参数 | 值 |
|---|---|
| I2C 地址 | 0x76 (SDO=GND) 或 0x77 (SDO=VDD) |
| ID 寄存器 | 0xD0 → 应返回 0x60 |
| 温度补偿参数 | 从寄存器 0x88-0x8D, 0x8E-0xA1 读取 |
| 温度计算 | 使用 Bosch 补偿算法,32-bit 有符号整型运算(禁止用浮点近似,会导致 >0.5°C 误差) |
| 湿度补偿参数 | 从寄存器 0xE1-0xE7 读取 |
| 最大采样速率 | 1Hz (温+湿+压, 超低功耗模式) ~ 180Hz (仅温度, 低功耗模式) |
| 常见坑 | 未等待测量完成 (status 寄存器 bit 3) 就读数据 → 读到上次的旧数据 |
STM32 HAL 库常见错误码:
| 错误码 | 含义 | 常见原因 | 排查步骤 |
|---|---|---|---|
| HAL_OK (0x00) | 正常 | — | — |
| HAL_ERROR (0x01) | 通用错误 | 配置参数错误或硬件异常 | 检查初始化参数合法性 |
| HAL_BUSY (0x02) | 外设忙 | 上笔传输未完成 | 等待操作完成或调用 Abort() |
| HAL_TIMEOUT (0x03) | 超时 | 外设无响应 | 检查设备是否上电、总线是否连通、中断是否开启 |
| HAL_I2C_ERROR_AF (0x04) | I2C ACK Failure | 从设备 NACK | 检查地址是否正确、设备是否就绪 |
| HAL_I2C_ERROR_BERR (0x02) | I2C 总线错误 | SDA 电平异常跳变 | 检查上拉电阻、检查是否有其他主机 |
| HAL_I2C_ERROR_OVR (0x08) | I2C 溢出 | 主机没有及时读 DR | 使用 DMA 或提高 I2C 中断优先级 |
| HAL_I2C_ERROR_DMA (0x10) | I2C DMA 错误 | DMA 传输异常 | 检查 DMA 通道和内存对齐 |
| HAL_SPI_ERROR_UDR (0x04) | SPI 下溢 | 从模式数据未准备好 | 增加预加载 |
| HAL_SPI_ERROR_OVR (0x02) | SPI 上溢 | 主模式读 DR 不及时 | 使用 DMA |
| HAL_TIMEOUT (I2C) | 等待 SB/ADDR/BTF 位超时 | I2C 外设未响应 | 用示波器抓 SDA/SCL、复位 I2C 外设 |
ESP-IDF 常见错误码:
| 错误码 | 含义 | 排查方向 |
|---|---|---|
| ESP_OK (0) | 正常 | — |
| ESP_FAIL (-1) | 通用失败 | 检查初始化参数 |
| ESP_ERR_TIMEOUT (-2) | 操作超时 | FreeRTOS 信号量超时或硬件超时 |
| ESP_ERR_NO_MEM (0x101) | 内存不足 | 检查堆剩余 (heap_caps_get_free_size) |
| ESP_ERR_INVALID_ARG (0x102) | 无效参数 | 指针为空或参数超出范围 |
| ESP_ERR_INVALID_STATE (0x103) | 状态异常 | 在错误的初始化状态下调用 |
| ESP_ERR_INVALID_SIZE (0x104) | 大小错误 | 缓冲区大小不足 |
| ESP_ERR_NOT_FOUND (0x105) | 未找到 | 查询的资源不存在 |
| ESP_ERR_NOT_SUPPORTED (0x106) | 不支持 | 该芯片不支持此功能 |
| ESP_ERR_WIFI_BASE (0x3000+) | WiFi 错误基址 | 通常是 ESP_ERR_WIFI_NOT_STARTED 等 |
给定芯片型号和引脚号,返回:
示例:
问:STM32F407VGT6 的 PA2 有哪些功能?
答:
PA2 (LQFP100 引脚 26)
- 复位功能: GPIO 输入(浮空)
- AF1: TIM5_CH3 / TIM2_CH3
- AF2: TIM9_CH1
- AF3: —
- AF4: —
- AF5: —
- AF6: —
- AF7: USART2_TX
- AF8: —
- AF9: —
- AF10: ETH_MDIO
- AF11: —
- AF12: —
- AF13: —
- AF14: —
- AF15: —
- 附加功能: ADC123_IN2, WKUP1
- 电气特性: FT (5V 耐受), I/O 最大灌电流 25mA
用 ASCII 字符画展示关键总线时序:
I2C 写操作时序:
SDA: \___/=A6=A5=A4=A3=A2=A1=A0=R/nW\_/A7=A6=A5=...=A0\_/D7=D6=...=D0\_/A
SCL: /‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_/‾\_
START ACK REG_ADDR ACK DATA ACK STOP
SPI Mode 0 写操作时序:
CS: \_____________________________________________________________/
SCK: \__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/‾‾\__/
MOSI: ===X===D7==X===D6==X===D5==X===D4==X===D3==X===D2==X===D1==X===D0==X====
MISO: --------X-------X-------X-------X-------X-------X-------X-------X--------
↑ 第一个上升沿采样
示例——查询 STM32F4 GPIO 寄存器:
GPIOA 基址: 0x40020000
偏移量 | 寄存器 | 访问 | 复位值 | 描述
0x00 | MODER | R/W | 0xA8000000 | 端口模式 (00=IN, 01=OUT, 10=AF, 11=ANALOG)
0x04 | OTYPER | R/W | 0x00000000 | 输出类型 (0=推挽, 1=开漏)
0x08 | OSPEEDR| R/W | 0x00000000 | 输出速度 (00=低速, 01=中速, 10=快速, 11=高速)
0x0C | PUPDR | R/W | 0x64000000 | 上下拉 (00=浮空, 01=上拉, 10=下拉)
0x10 | IDR | R | 0x0000XXXX | 输入数据寄存器
0x14 | ODR | R/W | 0x00000000 | 输出数据寄存器
0x18 | BSRR | W | 0x00000000 | 位设置/复位 (高 16bit 复位, 低 16bit 置位)
0x20 | AFRL | R/W | 0x00000000 | 复用功能低位 (Pin0-7)
0x24 | AFRH | R/W | 0x00000000 | 复用功能高位 (Pin8-15)
## 查询: [用户问题原文]
## 答案
[核心答案]
## 详细信息
[寄存器地址/计算公式/时序参数]
## 参考来源
- 手册: [RM编号/文档名], 章节: [章节号]
- 获取路径: [本地文件路径 或 官方下载URL]
## 注意事项
[相关踩坑提醒]