TWR-30 与 STM32F4 PA UWB 定位工程用户手册
版本:HV2.0
适用工程:BPHero_UWB_STM32F1_STM32F4IMU_Location_SourceCode_HV2.0
适用硬件:蓝点 TWR-30/BP30 基站、STM32F4 PA UWB 标签
1. 系统简介
本工程用于搭建一套基于 DW1000 的 UWB IMU融合定位系统。系统由多个基站和至少一个标签组成:
- 基站:使用
TWR-30/BP30,工程目录为STM32F1_UWB。 - 标签:使用
STM32F4 PA UWB,工程目录为STM32F4_UWB_PA。 - 公共库:DW1000 驱动、TWR 协议、滤波、OLED 等代码在
BP-UWB_LIB。
标签依次向多个基站发起双边双向测距,完成一轮后将所有距离打包发送给 0x0001 基站。0x0001 基站通过串口把定位数据转发给 PC 或上位机。
本工程当前默认配置为:
- 3 个基站,2D 定位。
- 基站地址:
0x0001、0x0002、0x0003。 - 标签地址:
0x0005。 - UWB 信道:Channel 2。
- UWB 速率:110 kbps。
- 串口:USART1,115200,8N1。
- 标签启用 MPU9250 运动检测,串口数据中带
s/m运动状态。
1.1 使用场景
本工程与 BP-TWR-30 套件的定位流程一致,都是让标签分别获取与各基站之间的距离,再由 0x0001 基站把定位数据上传到 PC。区别是本工程的标签使用 STM32F4 PA UWB,并额外输出 IMU 运动状态。
二维定位场景
使用 3 个基站和至少 1 个标签。基站 0x0001、0x0002、0x0003 放在同一平面,标签依次与三个基站测距。标签完成一轮后将距离汇总给 0x0001 基站,PC 或上位机根据三个距离和基站坐标计算二维位置。
三维定位场景
使用 4 个基站时,第四个基站地址通常配置为 0x0004。至少有一个基站与其他基站存在明显高度差,可用于 3D 定位。
多标签定位场景
多个 STM32F4 PA UWB 标签可以同时参与定位,但每个标签必须使用不同的 SHORT_ADDR。多标签时需要关注发送冲突、刷新率和上位机解析能力,必要时降低 MAX_FREQ_HZ 或增加标签错峰发送时间。
2. 工程目录说明
BPHero_UWB_STM32F1_STM32F4IMU_Location_SourceCode_HV2.0
├─ BP-UWB_LIB
│ ├─ decadriver DW1000 官方底层驱动
│ ├─ platform SPI、延时、互斥等平台适配
│ ├─ kalman 距离滤波
│ ├─ OLED OLED 显示驱动
│ └─ Src UWB 协议、测距、定位应用层
├─ STM32F1_UWB TWR-30/BP30 基站工程
└─ STM32F4_UWB_PA STM32F4 PA UWB 标签工程,含 MPU9250
常用文件:
BP-UWB_LIB/Src/bphero_uwb.h:角色、地址、基站数量、PANID、天线延时配置。BP-UWB_LIB/Src/tx_main.c:标签测距轮询、距离汇总、IMU 状态打包。BP-UWB_LIB/Src/rx_main.c:基站测距响应、距离计算、串口转发。BP-UWB_LIB/Src/bphero_uwb.c:DW1000 初始化、信道、速率、发射功率、PANID。STM32F4_UWB_PA/Core/Src/mpu9250:MPU9250 软件 I2C 与运动检测。
3. 工作原理
3.1 TWR 测距流程
标签和每个基站之间使用 P/A/F 三帧完成一次 DS-TWR 测距:
- 标签向目标基站发送
P,即 Poll。 - 基站收到
P后立即回复A,即 Ack/Response。 - 标签收到
A后定时发送F,即 Final,并携带三个时间戳。 - 基站收到
F后计算 TOF,再换算为距离。
基站在下一次回复 A 时,把上一次测得的距离带回给标签。标签因此可以逐个收集各基站距离。
3.2 距离汇总流程
标签一轮测距完成后,会向 0x0001 基站发送 M 数据包。该数据包内部携带 mri 定位数据。0x0001 基站收到 M 后,不做解析,直接通过 USART1 发送给 PC。
因此 PC 或上位机只需要连接 0x0001 基站的串口。
3.3 MPU9250 运动状态
STM32F4 PA UWB 标签启用 IMU_ENABLE 后,系统会初始化 MPU9250 并开启 Wake-on-Motion 运动检测。
- MPU9250 触发中断后,
PB15/EXTI15_10置位isMpu9250_moved = 1。 - 标签下一次发送
mri汇总帧时,运动状态字段输出m。 - 如果本轮没有运动中断,运动状态字段输出
s。 - 每次输出一次
m后,状态会清零,等待下一次运动中断。
4. 硬件连接
4.1 硬件外观参考
TWR-30/BP30 模块正面包含 DW1000、STM32F103、OLED、UWB 天线、USB/串口/SWD 等接口。实际使用时,基站节点通常使用该模块。

STM32F4 PA UWB 模块集成 STM32F4、DW1000、PA 功放、MPU9250 加速度/IMU 传感器、锂电池管理与下载接口。实际使用时,标签节点通常使用该模块。

STM32F4 PA UWB 的主要引脚关系如下图,其中 UWB 使用 SPI1,串口使用 USART1,MPU9250 使用软件 I2C 与外部中断。

4.2 基站 TWR-30/BP30
基站使用 STM32F1_UWB 工程。主要接口如下:
| 功能 | 引脚/外设 | 说明 |
|---|---|---|
| DW1000 SPI | SPI1 | PA5/SCK,PA6/MISO,PA7/MOSI |
| DW1000 CS | PA4 | 软件片选 |
| DW1000 IRQ | PB0 | 上升沿外部中断 |
| DW1000 RESET | PB4 | 复位控制 |
| 串口 | USART1 | 115200,8N1 |
| OLED | PB10/PB12/PB13/PB14/PB15 | 仅在启用 LCD_ENABLE 时使用 |
用于上位机时,只需要连接地址为 0x0001 的基站串口。通常连接:
- 串口工具 RXD 接基站 TX。
- 串口工具 GND 接基站 GND。
- 波特率设置为
115200。
4.3 STM32F4 PA UWB 标签
标签使用 STM32F4_UWB_PA 工程。主要接口如下:
| 功能 | 引脚/外设 | 说明 |
|---|---|---|
| DW1000 SPI | SPI1 | PA5/SCK,PA6/MISO,PA7/MOSI |
| DW1000 CS | PA4 | 软件片选 |
| DW1000 IRQ | PB0 | 上升沿外部中断 |
| DW1000 RESET | PB10 | 复位控制 |
| UWB PA | PB5 | 功放控制,默认置高 |
| MPU9250 SCL | PA8 | 软件 I2C |
| MPU9250 SDA | PB4 | 软件 I2C |
| MPU9250 INT | PB15 | 运动检测中断 |
| 串口 | USART1 | PA9/TX,PA10/RX,115200 |
| LED | PB7/PB8 | 状态指示 |
| Motor | PB14 | 预留,默认置高 |
标签串口主要用于调试信息,例如 hello dwm1000!、init pass! 和 moved!。
5. 软件环境
建议使用正版或授权的软件工具:
- Keil MDK-ARM 5。
- STM32F1xx 与 STM32F4xx Device Pack。
- ST-Link 或 J-Link 下载器。
- 串口助手或上位机软件,波特率
115200。
本工程已包含 .uvprojx 工程文件:
- 基站工程:
STM32F1_UWB/MDK-ARM/51UWB_F1.uvprojx - 标签工程:
STM32F4_UWB_PA/MDK-ARM/STM32F4_UWB.uvprojx
5.1 ST-Link Utility 安装
STM32 ST-LINK Utility 是 STMicroelectronics 提供的 STM32 下载和调试工具,主要用于通过 ST-Link 调试器/编程器与 STM32 通信,实现程序下载、芯片读取、擦除和校验等功能。
-
在资料包的“Keil以及上位机软件”目录下,解压
STM32 ST-LINK Utility安装包,打开解压后的setup安装文件。 -
安装过程中如果出现
Modify页面,选择Modify,然后点击Next。

- 后续页面保持默认选项,点击
Next,按界面提示完成安装。

- 安装完成后,桌面会出现
STM32 ST-LINK Utility图标。

5.2 ST-Link 与串口驱动
5.2.1 ST-Link 驱动安装
ST-Link 驱动用于让 PC 正确识别 ST-Link 下载器,使 Keil、STM32 ST-LINK Utility 等工具能够通过 ST-Link 对 STM32 进行下载、调试、读取芯片信息等操作。如果插入 ST-Link 后电脑无法识别,或下载工具无法连接目标板,优先检查该驱动是否已安装。
在资料包的“Keil以及上位机软件 > STLINK下载器驱动”目录下,解压驱动安装包,打开安装程序,并按界面提示完成安装。安装完成后,重新插拔 ST-Link,在 Windows 设备管理器中确认设备识别正常。
5.2.2 串口驱动安装
串口驱动用于让 PC 识别 USB 转 TTL 串口线,使串口助手能够读取 0x0001 基站输出的定位数据。常见 USB 转 TTL 串口线使用 CH340/CH341 芯片,应安装对应驱动。
在资料包的串口驱动目录下,根据电脑系统和位数选择对应驱动,打开安装程序并按界面提示完成安装。

驱动安装后,在 Windows 设备管理器中确认出现对应 COM 口,再在串口助手中选择该端口。
5.3 Keil MDK 安装
本工程源码编译需要使用 Keil MDK-ARM 5。打开 Keil MDK 安装程序,建议使用管理员权限运行安装文件,并按界面提示完成安装。
安装完成后,桌面会出现 Keil uVision5 图标。建议使用管理员权限打开 Keil,避免工程目录、Pack 安装或下载配置出现权限问题。

如果打开工程时提示缺少芯片包,请在 Keil Pack Installer 或 ST 官网安装 STM32F1xx、STM32F4xx 对应 Device Pack,然后重启 Keil 后重新打开工程。

说明:请使用正版授权或合法评估版本。本文档不提供软件破解、绕过授权或未授权使用步骤。
5.4 工程包结构
本工程采用公共库加多平台工程结构,BP-UWB_LIB 为公共代码,STM32F1_UWB 为 TWR-30/BP30 基站工程,STM32F4_UWB_PA 为 STM32F4 PA UWB 标签工程。

整体结构如下:

6. 编译与下载
角色和地址配置集中在 BP-UWB_LIB/Src/bphero_uwb.h。
下载前请先确认目标硬件和工程匹配:TWR-30/BP30 基站下载 STM32F1_UWB 工程,STM32F4 PA UWB 标签下载 STM32F4_UWB_PA 工程。下载完成后建议在模块背面标注角色和地址,例如 A1/0x0001、A2/0x0002、A3/0x0003、TAG/0x0005。
6.1 配置 3 个 TWR-30 基站
编译基站时,只打开 RX_NODE,关闭 TX_NODE:
#define RX_NODE
//#define TX_NODE
2D 定位使用 3 个基站:
#define MAX_ANTHOR 3
分别编译并下载 3 次,每次修改基站短地址:
#ifdef RX_NODE
#define SHORT_ADDR 0x0001
#endif
#ifdef RX_NODE
#define SHORT_ADDR 0x0002
#endif
#ifdef RX_NODE
#define SHORT_ADDR 0x0003
#endif
下载到对应的 3 个 TWR-30/BP30 模块。地址为 0x0001 的基站需要连接 PC 串口,用来输出上位机数据。
基站工程文件位于:
STM32F1_UWB/MDK-ARM/51UWB_F1.uvprojx

在 bphero_uwb.h 中配置角色。基站使用 RX_NODE,标签使用 TX_NODE,两者只能打开一个。

在 Keil 中常用按钮如下:编译、全部编译、下载。

6.2 配置 STM32F4 PA UWB 标签
编译标签时,只打开 TX_NODE,关闭 RX_NODE:
//#define RX_NODE
#define TX_NODE
标签短地址不要和基站重复,默认是:
#ifdef TX_NODE
#define SHORT_ADDR 0x0005
//#define LCD_ENABLE
#define IMU_ENABLE
#endif
说明:
SHORT_ADDR是标签 ID。当前串口协议只输出低 8 位,建议标签地址使用0x0005、0x0006这类低字节不重复的值。IMU_ENABLE开启 MPU9250 运动检测。LCD_ENABLE默认关闭。开启 OLED 会增加显示开销,可能降低定位刷新率。
然后打开并编译:
STM32F4_UWB_PA/MDK-ARM/STM32F4_UWB.uvprojx

标签工程中打开 TX_NODE,关闭 RX_NODE。IMU 标签不支持夜景显示, LCD_ENABLE不能打开。

编译成功后,将程序下载到 STM32F4 PA UWB 标签。
6.3 配置 4 基站 3D 定位
如果需要 4 个基站,将:
#define MAX_ANTHOR 4
然后增加第 4 个基站:
#define SHORT_ADDR 0x0004
然后重新编译全部标签和基站HEX。
标签会轮询 0x0001 到 0x0004,并在 mri 帧中输出第 4 路距离。
6.4 使用 ST-Link Utility 下载 HEX
如果不想重新编译,也可以使用已生成的 HEX 下载。打开 ST-Link Utility,连接目标板后选择 Target -> Program & Verify,浏览选择对应 HEX 文件,然后点击 Start。
6.4.1 连接 ST-Link
ST-Link 一端通过 SWD 排针连接目标模块,另一端通过 USB 连接电脑。TWR-30/BP30 基站连接时,请使用靠近天线一侧的 ST-Link/SWD 底座,不要接到串口接口。常用连接关系如下:
| ST-Link | TWR-30/BP30 基站 |
|---|---|
| 3.3V | 3.3V |
| SWCLK | CLK |
| SWDIO | DIO |
| GND | GND |
STM32F4 PA UWB 标签同样通过其下载接口连接 ST-Link,连接前请确认下载接口丝印和工程硬件版本一致。以接口定义为准。
6.4.2 下载 HEX

工程编译的HEX 路径:
STM32F1_UWB/MDK-ARM/51UWB_F1/51UWB_F1.hex
STM32F4_UWB_PA/MDK-ARM/STM32F4_UWB/STM32F4_UWB.hex
注意:可以直接下载资料包已经编译好的现有 HEX ,地址和角色就是生成 HEX 时的配置。
7. 上电检查
模块程序下载完成后再上电测试。推荐流程如下:
- 给 3 个 TWR-30/BP30 基站下载对应地址的基站程序。
- 给 STM32F4 PA UWB 标签下载标签程序。
- 给所有设备供电,先观察指示灯是否正常。
- 先用串口助手分别检查基站和标签初始化信息。
- 确认
0x0001基站能输出定位帧后,再打开定位上位机。
7.1 基站
- 下载对应地址的基站程序。
- 通过 USB 口或稳定 5V 电源给基站供电。
- 连接串口后复位,正常会看到类似:
hello dwm1000!
init pass!
如果 DW1000 初始化失败,串口可能输出:
dwm1000 init fail!
此时优先检查供电、SPI、CS、RESET、IRQ、模块焊接和下载的工程是否匹配硬件。
7.2 标签
- 下载标签程序。
- 使用标签板支持3.3V供电方式给 STM32F4 PA UWB 标签供电。
7.3 串口助手查看初始化信息
可使用串口助手查看模块初始化信息。串口参数为 115200, 8N1。

打开串口助手后选择正确 COM 口,并设置波特率 115200。

基站或标签复位后,如果 DW1000 初始化正常,会看到 hello dwm1000! 和 init pass!。

如果使用 USB 转 TTL 串口线查看 0x0001 基站数据,常用连接如下:
| 串口线 | 0x0001 基站 |
|---|---|
| RXD | TX |
| GND | GND |
| 5V | 不连接 |
| TXD | 不连接 |
打开串口助手后点击启动/打开串口。如果没有输出信息,先按模块复位键;仍然没有输出时,检查供电、COM 口、波特率、串口线连接和程序是否已正确下载。
8. 串口输出协议
PC 只需要读取 0x0001 基站的 USART1。串口参数:
115200, 8 data bits, no parity, 1 stop bit
0x0001 基站转发的定位数据为 18 字节。当前代码发送内容如下:
| 字节序号 | 字段 | 说明 |
|---|---|---|
| 0 | m |
帧头 1 |
| 1 | r |
帧头 2 |
| 2 | i |
帧头 3 |
| 3 | 0x02 |
协议版本 |
| 4 | TAG_ID |
标签 ID,来自 SHORT_ADDR 低 8 位 |
| 5 | Frame_L |
帧序号低字节 |
| 6 | Frame_H |
帧序号高字节 |
| 7 | Dis0_L |
基站 0x0001 距离低字节 |
| 8 | Dis0_H |
基站 0x0001 距离高字节 |
| 9 | Dis1_L |
基站 0x0002 距离低字节 |
| 10 | Dis1_H |
基站 0x0002 距离高字节 |
| 11 | Dis2_L |
基站 0x0003 距离低字节 |
| 12 | Dis2_H |
基站 0x0003 距离高字节 |
| 13 | Dis3_L |
4 基站时为第 4 路;3 基站时重复第 1 路 |
| 14 | Dis3_H |
4 基站时为第 4 路;3 基站时重复第 1 路 |
| 15 | s/m |
s 表示静止,m 表示运动 |
| 16 | 0x0A |
换行 LF |
| 17 | 0x0D |
回车 CR |
距离单位是厘米,低字节在前,高字节在后。例如:
distance_cm = Dis_L + (Dis_H << 8)
如果某一路距离无效,标签会输出 0xFFFF。
注意:当前源码结尾顺序是 \n\r,不是常见的 \r\n。如果上位机按行解析异常,可以兼容两种结尾,或在 tx_main.c 中调整结尾顺序。
串口十六进制显示时,可以看到连续的定位帧。解析时以 m r i 三字节作为帧头。

提示:定位帧是二进制数据,肉眼直接查看可能不可读。使用串口助手排查时建议打开 HEX 显示,先确认能连续看到 6D 72 69,再交给上位机解析。
9. 基站摆放
9.1 2D 定位 3基站
3 个基站应放在同一水平面,建议高度一致、无遮挡。推荐摆放:
- 基站
0x0001:坐标(0, 0) - 基站
0x0002:放在 X 轴,例如(5, 0) - 基站
0x0003:放在平面上方,例如(0, 5)或(5, 8)
标签活动区域尽量位于 3 个基站围成的区域内部。不要让标签长期处在三角形外侧,否则几何解算误差会明显变大。
3 基站 2D 定位推荐摆放如下图。基站 0 即地址 0x0001,基站 1 即 0x0002,基站 2 即 0x0003。

9.2 3D定位4基站
4 基站可用于 3D 定位。建议基站形成矩形或空间结构:
- 3D:至少有一个基站与其他基站存在明显高度差。
4 基站或 3D 定位摆放时,需要保证上位机中的坐标、高度与实际测量一致。

9.3 摆放注意事项
- 基站与标签之间尽量保持视距,避免金属、墙体、人体遮挡。
- 模块之间不要贴得太近,建议至少大于 50 cm;只做近距离初始化排查时也不要小于 20 cm。
- 基站坐标必须与上位机填写一致。
- 基站天线朝向和安装高度尽量一致。
- 多套系统同时工作时,应修改
NET_PANID,避免互相干扰。 - 3 基站 2D 定位时,标签活动范围建议位于三角形内部,靠近通信边缘或跑到基站包围区域外会明显增大误差。
模块上电和摆放时,应尽量保持天线朝向一致,避免让电源线、金属支架或人体长时间遮挡 UWB 天线。
10. 定位上位机操作
定位测试时,打开定位上位机,选择 0x0001 基站串口,并填写基站坐标。坐标必须与实际摆放一致。

在上位机中填写基站坐标、距离参数,点击连接后即可显示标签位置。建议先让标签在基站包围区域内缓慢移动,确认轨迹是否稳定。

操作顺序建议如下:
- 先用串口助手确认
0x0001基站正在上传mri定位帧。 - 关闭串口助手,避免 COM 口被占用。
- 双击打开定位上位机。
- 在上位机右上角选择
0x0001基站对应 COM 口并点击连接。 - 按实际测量结果填写基站坐标。
- 将标签放在基站包围区域内移动,观察轨迹是否稳定。
如果上位机无法连接串口,优先检查串口助手是否仍占用该 COM 口;如果能连接但不显示标签,回到串口助手确认是否有连续 mri 数据。
11. 定位刷新率
标签定时器周期在 BP-UWB_LIB/Src/tx_main.c 中配置:
#define MAX_FREQ_HZ 2
#define MAX_TX_Node 1
当前含义:
MAX_FREQ_HZ = 2:目标定位刷新率约 2 Hz。MAX_ANTHOR = 3:一轮要测 3 个基站。- 标签还会额外发送一次
M汇总帧。
如果要提高刷新率,可适当增大 MAX_FREQ_HZ,但需要同时关注丢包、串口输出、上位机处理速度和多标签冲突。
多标签时,应给不同标签设置不同 SHORT_ADDR。当前代码通过检测干扰后随机微调下一次发送时间,降低冲突概率。
12. 推荐快速使用流程
- 打开
BP-UWB_LIB/Src/bphero_uwb.h。 - 设置
RX_NODE,分别编译下载 3 个基站,地址为0x0001、0x0002、0x0003。 - 设置
TX_NODE,标签地址设为0x0005,启用IMU_ENABLE,编译下载 STM32F4 PA UWB 标签。 - 将
0x0001基站串口接到 PC,波特率115200。 - 按实际坐标摆放 3 个基站。
- 给所有设备供电,先看初始化信息是否有
init pass!。 - 打开上位机或串口助手,确认有
mri数据输出。 - 填写基站坐标,开始定位测试。
- 若距离整体偏差稳定,按“14.10 定位误差太大”中的方法进行
RX_ANT_DLY校准。
13. 源码与文档对应关系
| 手册内容 | 源码位置 |
|---|---|
| 角色、地址、基站数量、PANID | BP-UWB_LIB/Src/bphero_uwb.h |
| UWB Channel 2、110 kbps | BP-UWB_LIB/Src/bphero_uwb.c |
| 标签轮询基站 | BP-UWB_LIB/Src/tx_main.c |
mri 数据打包 |
BP-UWB_LIB/Src/tx_main.c |
| 基站距离计算 | BP-UWB_LIB/Src/rx_main.c |
| 基站串口转发 | BP-UWB_LIB/Src/rx_main.c |
| MPU9250 初始化 | STM32F4_UWB_PA/Core/Src/main.c |
| MPU9250 运动检测 | STM32F4_UWB_PA/Core/Src/mpu9250/MPU9250.c |
| F4 标签引脚定义 | STM32F4_UWB_PA/Core/Inc/main.h |
| F1 基站引脚定义 | STM32F1_UWB/Core/Inc/main.h |
14. 常见问题
14.1 串口没有定位数据
检查:
- PC 是否连接的是
0x0001基站,而不是标签或其他基站。 - 串口是否为 USART1,波特率是否为
115200。 - 基站
0x0001是否正常上电并初始化成功。 - 标签是否正在运行,且
MAX_ANTHOR与基站数量一致。 NET_PANID是否所有设备一致。- 基站地址是否从
0x0001连续配置。
14.2 只有初始化信息,没有 mri 数据
可能原因:
- 标签没有成功和全部基站完成测距。
0x0001基站没有收到标签发送的M汇总帧。- 基站坐标太远、遮挡严重或信号弱。
- 基站地址配置重复。
- 编译时角色宏配置错误,例如基站工程仍然是
TX_NODE。
14.3 距离显示 0xFFFF
表示该路距离无效。常见原因:
- 对应地址的基站未上电。
- 基站地址没有配置为期望值。
- 标签与基站距离太远或遮挡。
- UWB 信道、PANID 或速率配置不一致。
14.4 运动状态一直是 s
检查:
bphero_uwb.h中是否启用IMU_ENABLE。- 标签是否使用
STM32F4 PA UWB工程。 - MPU9250 的软件 I2C 引脚 PA8/PB4 是否正常。
- MPU9250 INT 是否连接到 PB15。
- 移动幅度是否足够触发 Wake-on-Motion。
14.5 运动状态一直是 m
可能是 MPU9250 中断阈值过低。当前代码中阈值在:
writeByte(MPU9250->I2C_Addr, WOM_THR, 0x01);
位置:STM32F4_UWB_PA/Core/Src/mpu9250/MPU9250.c
可以适当增大阈值,例如 0x04、0x08,再重新测试。
14.6 多标签定位不稳定
建议:
- 每个标签使用不同
SHORT_ADDR。 - 适当降低
MAX_FREQ_HZ。 - 增大标签之间的发送错峰时间。
- 如果上位机自己做多标签滤波,可按需要关闭或调整基站侧 Kalman 滤波。
14.7 模块供电问题
TWR-30/BP30 基站通常通过 USB 口外接 5V 移动电源供电,也可以在下载调试时由 ST-Link 的 3.3V 侧辅助供电。不要使用 USB 转 TTL 串口线的 5V 给模块供电。
STM32F4 PA UWB 标签请按标签板硬件说明使用 USB、锂电池或板载电源接口供电,避免给错误接口接入超过板卡允许范围的电压。供电不足会导致 DW1000 初始化失败、串口无输出或定位帧中距离频繁无效。
14.8 模块摆放和安装问题
模块使用时建议固定、竖直、无遮挡,天线朝向尽量一致。模块晃动、倾斜、贴近金属支架、靠近人体或处在基站通信边缘,都会导致距离跳动和定位误差变大。
- 定位排查:模块间距建议大于 50 cm,且保持视距。
- 2D 定位:3 个基站建议构成三角形,坐标与上位机填写一致。
- 3D 或 4 基站定位:至少一个基站要有明显高度差,并在上位机中填写真实高度。
14.9 指示灯和初始化状态
指示灯可作为快速排查参考。电源指示灯不亮时,先检查供电;UWB 相关指示灯长时间无变化时,结合串口初始化信息判断。
| 现象 | 优先检查 |
|---|---|
| 没有任何指示灯 | 供电、电源线、电源开关 |
| 串口无输出 | 程序是否下载、COM 口、波特率、串口线接法 |
输出 init pass! |
DW1000 初始化正常 |
输出 dwm1000 init fail! |
DW1000、SPI、CS、RESET、IRQ、供电或工程硬件不匹配 |
标签串口有 moved! |
MPU9250 运动检测中断正常 |
14.10 定位误差太大
常见原因:
- 标签在基站包围区域外或靠近通信边缘。
- 基站坐标填写与真实测量值不一致。
- 模块之间有墙体、人体、金属、设备外壳等遮挡。
- 模块间距太近或安装高度差异没有在上位机中体现。
- 天线延时没有校准,导致距离存在稳定偏差。
解决方法:
- 如果误差随机跳动,优先排查遮挡、供电、摆放、信道干扰和上位机基站坐标。
- 如果所有距离整体偏大或偏小,进行天线延时校准,主要调整
RX_ANT_DLY。
RX_ANT_DLY 配置位置:
#ifndef RX_ANT_DLY
#define RX_ANT_DLY 32900
#endif
天线延时校准流程:
- 将标签和某个基站固定在已知距离,例如 2 m 或 5 m。
- 保持视距无遮挡。
- 读取稳定后的串口距离。
- 如果测量值整体偏大或偏小,微调
RX_ANT_DLY。 - 重新编译下载,再复测。
当前工程中 TX_ANT_DLY 默认为 0,主要通过 RX_ANT_DLY 修正。
15. 售后保修
质保期限
- 快递签收起7日内:在质保范围内,包邮保修或更换。
- 7日至15日:在质保范围内,免费保修,运费买卖双方各自负责。
- 15日至1年:在质保范围内,免人工维修费,酌情收取配件更换成本费,来回运费买家负责,无法维修的将原样返回给买家。
质保范围
- 本产品质保及售后只限在中国大陆境内。
- 由于运输途中造成的产品开箱无法正常使用。
- 产品本身元器件损坏造成的无法正常工作。
- 产品设计缺陷造成无法正常使用。
免责范围
包括以下情况但不限于,视可维修情况进行售后,所有费用由买家承担。
- 未经本公司允许,擅自拆解或维修产品。
- 未正确按照说明书安装规范操作,例如连接大于5V的电源供电,造成产品损坏。
- 自然灾害,火灾等不可抗拒的外界力造成的产品损坏。