一、硬件介绍
产品特点
使用的是天空星STM32F407开发板,搭载ARM Cortex-M4F内核的STM32F407VET6,最高主频为168MHz,Flash 512KB,SRAM 192KB,板载SPI Flash、Micro SD卡插槽等;
STM32F407VET6

主要原理图

二、环境搭建

2、搭建方法
搭建方法点此查看!!!
三、硬件设备
雷达模块(CEM5831E-M12)
CEM5831E-M12 是一款一发两收24GHz毫米波人体存在检测雷达模块。除了检测人体有无及距离外,还可以输出人体相对于雷达的角度,实现人体的位置检测,实现分区域联动控制,可同时检测三个运动目标;

相关参数信息
| 参数 |
典型值 |
| 频率 |
24GHz ISM |
| 调制方式 |
FMCW |
| 检测距离 |
裸板1米平挂:运动直线距离7米,存在直线距离5米 |
| 供电 |
5V |
| 电流 |
120mA(平均电流) |
| 输出串口电平 |
3.3V |
| 检测周期 |
50ms |
| 数据格式 |
串口 16进制输出 |
| 距离精度 |
+/-0.3m |
| 角度误差 |
+/-10° |
| 检测目标数 |
3个 |
检测角度范围

实物连接效果
| 硬件引脚 |
- |
- |
- |
- |
| STM32 |
PA10(RX) |
5V |
GND |
- |
| 雷达模块 |
TX |
5V |
GND |
- |

四、代码编写
效果:在串口上显示,雷达模块当前监测到的目标个数ID,以及对应的人体运动相关信息;
示例 ID: 1 | 距离: 65 cm | 速度: -24 cm/s | 相对角度: 9 °
(其中速度的符号(-) ,代表目标正靠近雷达)
主要相关代码
// ========== 雷达协议配置 ==========
#define HEAD 0xCF
#define TAIL 0xEF
#define BUF_SIZE 50
#define DATA_PER_TARGET 8 // 单个目标固定8字节
// 接收缓冲区
uint8_t buf[BUF_SIZE] = {0};
uint8_t bufLen = 0;
struct Target {
uint8_t id;
uint16_t distance; // 距离 cm
int16_t speed; // 速度 cm/s
int8_t angle; // 相对角度
};
// 硬件串口1:RX=PA10, TX=PA9
HardwareSerial Serial1(PA10, PA9);
Target target;
void setup() {
Serial1.begin(115200);
delay(100);
}
void loop() {
while (Serial1.available() > 0) {
uint8_t rxB = Serial1.read();
if (rxB == HEAD) {
bufLen = 0;
}
if (bufLen < BUF_SIZE) {
buf[bufLen++] = rxB;
} else {
bufLen = 0;
continue;
}
if (rxB == TAIL) {
parseFrame();
bufLen = 0;
}
}
}
void parseFrame() {
const uint8_t MIN_FRAME_LEN = 13;
if (bufLen < MIN_FRAME_LEN) {
return;
}
if (buf[0] != HEAD) {
return;
}
uint8_t targetNum = buf[3];
uint16_t dataTotalLen = 4 + targetNum * DATA_PER_TARGET;
if (targetNum == 0 || dataTotalLen >= bufLen) {
return;
}
Serial1.print("检测到目标个数: ");
Serial1.println(targetNum);
Serial1.println("----------------------------------------");
for (uint8_t i = 0; i < targetNum; i++) {
uint16_t pos = 4 + i * DATA_PER_TARGET;
target.id = buf[pos];
target.distance = (buf[pos + 1] << 8) | buf[pos + 2];
target.speed = (buf[pos + 3] << 8) | buf[pos + 4];
target.angle = buf[pos + 5];
Serial1.printf("ID:%2d | 距离:%4d cm | 速度:%4d cm/s | 相对角度:%3d °\n",
target.id, target.distance, target.speed, target.angle);
}
Serial1.println("----------------------------------------\n");
}
五、效果演示

|