mit einem Klick
knowledge-query
知识库检索引擎——查询芯片手册、通信协议、传感器参数与错误码诊断
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Menü
知识库检索引擎——查询芯片手册、通信协议、传感器参数与错误码诊断
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Basierend auf der SOC-Berufsklassifikation
设备交互智能体——扫描、连接、操纵物理开发板与嵌入式Linux板卡
板卡管理器——管理板卡配置、端口别名、外设清单与踩坑记录
嵌入式全流程开发助手——从MCU选型到固件烧录的全链路支持
硬件调试专家——串口监听、波形分析、故障定位与寄存器级调试
技能提炼器——从调试会话中提取可复用技能,整合记忆并自我优化
| 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]
## 注意事项
[相关踩坑提醒]