手把手教你用STM32F103和BU01-DB开发板,5分钟搞定UWB室内定位测距

张开发
2026/4/21 16:05:36 15 分钟阅读

分享文章

手把手教你用STM32F103和BU01-DB开发板,5分钟搞定UWB室内定位测距
5分钟实战用STM32F103驱动BU01-DB实现厘米级UWB测距第一次拿到BU01-DB开发板时最让人兴奋的莫过于它宣称的厘米级测距精度。作为嵌入式开发者我们总希望用最短时间验证核心功能。本文将带你跳过繁琐的理论直接进入实战环节——只需STM32F103、USB转TTL模块和几根杜邦线就能在5分钟内获取第一组UWB测距数据。1. 硬件准备与接线指南手边需要准备以下硬件BU01-DB开发板建议两块组成测距对STM32F103最小系统板如BluePillUSB转TTL模块推荐CH340G杜邦线若干关键接线要点BU01-DB -- STM32F103 -- USB转TTL U1_TX ---- PA10(RX) ---- TX U1_RX ---- PA9(TX) ---- RX GND ---- GND ---- GND V3.3 ---- 3.3V ---- (不连接)注意BU01-DB的供电电压必须为3.3V直接使用STM32的3.3V输出最安全。若用USB转TTL的5V供电可能损坏模块。常见接线错误排查无响应检查TX/RX是否交叉连接乱码确认波特率设置为115200供电不足测量V3.3引脚电压应在3.2-3.4V之间2. 基础AT指令快速验证连接串口调试工具如Putty或Arduino IDE串口监视器发送以下指令序列AT # 测试通信 ATanchor_tag0 # 设为标签模式 ATswitchdis1 # 开启连续测距 ATinterval5 # 设置5Hz更新率正常响应示例 ATswitchdis1 OK Distance: 3.21m关键参数解析指令参数范围功能说明anchor_tag0/10标签模式,1基站模式switchdis0/1测距功能开关interval5-20数据更新频率(Hz)3. STM32代码实战使用HAL库快速实现自动测距以Keil MDK为例// 串口初始化 UART_HandleTypeDef huart1; huart1.Instance USART1; huart1.Init.BaudRate 115200; huart1.Init.WordLength UART_WORDLENGTH_8B; HAL_UART_Init(huart1); // 发送AT指令 void Send_AT_Command(char *cmd) { HAL_UART_Transmit(huart1, (uint8_t*)cmd, strlen(cmd), 100); HAL_UART_Transmit(huart1, (uint8_t*)\r\n, 2, 100); } // 在main()中初始化 Send_AT_Command(ATanchor_tag0); Send_AT_Command(ATswitchdis1);数据解析技巧// 接收回调函数示例 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(strstr(rx_buffer, Distance)) { sscanf(rx_buffer, Distance: %fm, current_distance); printf(当前距离: %.2f米\n, current_distance); } }4. 进阶功能与性能优化多节点组网方案设置一个基站anchor_tag1和多个标签基站通过串口广播自身坐标标签计算相对距离后上传服务器精度提升技巧避免金属物体靠近天线保持天线在同一水平面定期用ATRST复位模块清除状态缓存实测性能对比环境条件平均误差最大漂移空旷实验室±2cm5cm普通办公室±8cm15cm多径干扰区±12cm30cm5. 常见问题现场诊断现象1距离值固定不变检查天线连接是否松动确认两块开发板分别设置为基站和标签模式尝试降低更新频率ATinterval5现象2数据跳动严重确保供电稳定示波器检查3.3V纹波避开Wi-Fi路由器等2.4G设备增加软件滤波distance 0.7*new 0.3*old现象3通信距离骤减检查PCB天线是否损坏测量供电电流正常约120mA尝试重置出厂设置ATRESTORE记得第一次测试时我花了半小时才发现是因为USB转TTL的TX/RX接反了。现在每次接线都会用万用表蜂鸣档确认通路这个小习惯节省了大量调试时间。

更多文章