Use when working with BU03 UWB module hardware, checking pin connections, SPI wiring, DW3000 register values, or diagnosing communication issues. Reference for physical wiring state and verified functionality.
BU03 = STM32F407IGHx + DW3000 UWB 模块。当前仅接 SPI 6 线,IRQ/RST/WAKEUP 未接。
| 功能 | MCU引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | BU03 供电 |
| GND | GND | 公共地 |
| SPI2_SCK | PB13 | 时钟 |
| SPI2_MISO | PB14 | 主入从出 |
| SPI2_MOSI | PB15 | 主出从入 |
| SPI2_CS | PB12 | 软件 GPIO 片选 |
| 功能 | MCU引脚 | 影响 | 替代方案 |
|---|---|---|---|
| RST |
| PI4 |
| 无硬件复位 |
| SPI 软复位 |
| IRQ | PI5 | GPIO 中断不触发 | SPI 轮询 SYS_STATUS[0] |
| WAKEUP | PI6 | 无唤醒控制 | 暂无需求 |
decamutexon() 禁用 EXTI9_5 NVIC(虽然 IRQ 未接但仍保留)| 读到值 | 含义 | 排查 |
|---|---|---|
0x00000000 | SPI 无应答 | 检查供电/SPI 线/CS |
0xFFFFFFFF | MISO 悬空 | MISO 断线 |
0xDECA0302 | ✅ DW3000 C0 | 正常 |
0xDECA0312 | DW3000 C2 | 兼容 |
// Core/platform/dw3000_hw.c
void dw3000_hw_process_irq(void) {
uint32_t st = dwt_read_reg(0x44UL); // SYS_STATUS
if (st & 0x1UL) { // IRQS bit
dwt_isr(); // 执行中断服务
}
}
在主循环每轮调用。取代 GPIO 外部中断。
| 颜色 | 引脚 | 状态含义 |
|---|---|---|
| 绿(PH11) | 快闪×3 | 启动中 |
| 红(PH12) | 快闪 200ms | Init 失败 |
| 红(PH12) | 慢闪 500ms | Config 失败 |
| 绿(PH11) | 常亮 | 就绪/等待 |
| # | 功能 | TAG | ANCHOR | 验证方式 |
|---|---|---|---|---|
| 1 | SPI 通信 (DEV_ID=0xDECA0302) | ✅ | ✅ | read_memory |
| 2 | 完整初始化 (init_step=3, cfg_step=10) | ✅ | ✅ | read_memory |
| 3 | 无错误 (error_code=0) | ✅ | ✅ | read_memory |
| 4 | SPI 轮询 IRQ (tx_done>0) | ✅ | N/A | read_memory |
| 5 | TAG 发帧 (twr_cnum 增长) | ✅ | N/A | read_memory |
| 6 | 超时统计 (twr_fail>0) | ✅ | N/A | read_memory |
| 7 | 距离过滤 (twr_ok=0, dist=0) | ✅ | ✅ | read_memory |
| 8 | ANCHOR RX 监听 (rx_reenable=1) | N/A | ✅ | read_memory |
| 9 | ANCHOR 被动 (tx_done=0, twr_fail=0) | N/A | ✅ | read_memory |
| 功能 | 依赖 |
|---|---|
| DS-TWR 实际测距 | 两块板+两个 ST-Link |
| 天线延迟校准 | 已知距离标定 |
| 测距精度评估 | 多距离点测试 |
| 帧过滤 | 多设备干扰环境 |
| 参数 | 值 |
|---|---|
| Channel | CH9 (7987.2 MHz) |
| Preamble | 64 |
| PAC | 8 |
| SFD | IEEE_4Z |
| Code | 11/11 |
| Ant Delay | 16368 (未校准) |
| TWR Mode | DS-TWR |
| PAN ID | 0x4321 |
| TAG Addr | 0x0001 |
| ANCHOR Addr | 0x0002 |
每次编译后用
arm-none-eabi-nm LED.elf | Select-String "dbg_"更新
| 变量 | TAG 地址 | ANCHOR 地址 | 类型 |
|---|---|---|---|
| dbg_init_step | 0x200007c4 | 0x200007c4 | int32 |
| dbg_cfg_step | 0x200007b8 | 0x200007b8 | int32 |
| dbg_dev_id | 0x200007c0 | 0x200007c0 | uint32 |
| dbg_error_code | 0x200007bc | 0x200007bc | int32 |
| dbg_twr_ok_count | 0x200007b4 | 0x200007b4 | uint32 |
| dbg_twr_fail_count | 0x200007b0 | 0x200007b0 | uint32 |
| dbg_last_distance | 0x200007ac | 0x200007ac | uint32 |
| dbg_last_tick | 0x200007a8 | 0x200007a8 | uint32 |
| tx_done_cnt | 0x2000134c | 0x2000134c | uint32 |
| twr_cnum | 0x2000136a | 0x2000136a | uint16 |
| rx_reenable | — | 0x20001261 | bool(uint8) |