US-100 超声波测距传感器驱动教程(UART 模式)

1. 传感器简介

US-100 是一款超声波测距模块,支持串口(UART)和电平触发(Trig/Echo)两种工作模式。本教程重点介绍 UART 模式,直接通过串口发送命令并获取距离值,无需精确计时。

参数规格

参数
工作电压 2.4V ~ 5.5V
测距范围 2cm ~ 450cm
测距精度 ±0.3cm + 0.2%
串口波特率 9600 bps(默认),8N1
模块大小 45mm x 20mm x 15mm

引脚定义

引脚 说明
VCC 电源 2.4V~5.5V
TX 串口发送(UART 模式,连 MCU RX)
RX 串口接收(UART 模式,连 MCU TX)
GND

硬件接线(UART 模式)

US-100 GD32E23x AT32F403A
VCC 3.3V 3.3V
TX PA3 (RX) PA3 (RX)
RX PA2 (TX) PA2 (TX)
GND GND GND

2. UART 通信协议

US-100 UART 模式使用 9600 bps、8N1 格式:

命令 说明
距离测量 0x55 返回 2 字节:H_Byte L_Byte
温度测量 0x50 返回 1 字节:温度值 °C

距离测量流程:

  • 主机发送 0x55
  • US-100 返回 2 字节
  • 距离(mm) = H_Byte*256 + L_Byte

3. GD32E23x 驱动实现

/* us100.c */
#include "usart_config.h"

#define CMD_READ_DIST 0x55
#define CMD_READ_TEMP 0x50

void us100_init(void) {
    usart_config();
    delay_ms(100);
}

uint16_t us100_read_distance(void) {
    uint8_t h_byte, l_byte;
    usart_send_byte(CMD_READ_DIST);
    delay_ms(50);
    if (usart_rx_available() < 2) return 0xFFFF;
    h_byte = usart_recv_byte();
    l_byte = usart_recv_byte();
    return (uint16_t)h_byte*256 + l_byte;
}

uint8_t us100_read_temperature(void) {
    usart_send_byte(CMD_READ_TEMP);
    delay_ms(50);
    if (usart_rx_available() < 1) return 0xFF;
    return usart_recv_byte();
}

主程序:

int main(void) {
    uint16_t distance;
    systick_init();
    usart1_init();
    led_init();
    us100_init();
    while (1) {
        delay_ms(500);
        distance = us100_read_distance();
        if (distance == 0xFFFF) {
            usart_puts("[FAIL] Read timeout!\r\n");
        } else {
            usart_puts("[OK] Distance: ");
            usart_putint(distance);
            usart_puts(" mm\r\n");
        }
    }
}

串口输出:

[OK] Distance: 150 mm
[OK] Distance: 152 mm

4. AT32F403A 适配

AT32 版本仅寄存器差异:头文件、GPIO模式、时钟使能、主频适配。

5. 编译与烧录

# GD32
   text    data     bss     dec     hex
   5124       0    2812    7936    1f00  US100_GD32.elf

# AT32
   text    data     bss     dec     hex
   4016       0       4    4020    0fb4  US100_AT32.elf

6. 注意事项

  1. 必须移除背面短接帽才能进入 UART 模式
  2. 发送命令后需等待 50ms 再读取
  3. 超出测距范围时模块不返回数据,需超时处理

\n\n> 完整工程源码(含 Keil 工程文件)已整理完毕,详见博主主页。

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐