目录
前言
安信可新款雷达模组Rd-03E已经上市,该雷达采用高性能一发一收微带天线,包含极简化 24 GHz 雷达传感器硬件 Xen102 和智能算法固件 RM01,而智能算法固件 RM01 采用 FMCW 波形和 S3系列芯片专有的先进信号处理技术,可以实现精准的人体测距和运动/微动人体感应。本应用示例使用STM32解析Rd-03E的串口数据,检测人体距离雷达的距离,根据距离不同来点亮不同的灯珠,0~2米内点亮 LED1,2~4米内点亮 LED2,4~6米内点亮 LED3。
一、Rd-03E引脚说明
J2引脚说明:
J#PIN# | 名称 | 功能 | 工作范围 |
---|---|---|---|
J2Pin1 | VCC | 电源输入 | 4.5V~5.5V |
J2Pin2 | GND | 接地 | - |
J2Pin3 | OT1 | UART_TX | 0~3.3V |
J2PIN4 | RX | UART_RX | 0~3.3V |
J2PIN5 | OT2 | UART_TX(备用) | 0~3.3V |
J3引脚说明:
J#PIN# | 名称 | 功能 | 说明 |
---|---|---|---|
J3PIN1 | GND | 接地 | - |
J3PIN2 | DIO | 数据口 | 0~3.3V |
J3PIN3 | CLK | 时钟信号 | 0~3.3V |
J3PIN4 | 3V3 | 电源输入 | 3.3V |
二、软件设计框架
三、STM32F103C8T6使用CubeMX搭配HAL库配置
打开CubeMX,选择STM32F103C8T6。
选择两个串口,分别是串口1和串口2,PA9为USART1_TX,PA10为USART1_RX,PA2为USART2_TX,PA3为USART_RX。
选择异步通讯,勾选中断,注意:串口1的波特率为256000,串口2波特率为115200。
设置GPIO口
四、STM32与Rd-03E和LED灯的接线
Rd-03E | STM32 | LED | ||
---|---|---|---|---|
5V | — — | 5V | — — | |
GND | — — | GND | — — | LED1\2\3 负极 |
OT1 | — — | PA10 | ||
RX | — — | PA9 | ||
PA11 | — — | LED1正极 | ||
PA12 | — — | LED2正极 | ||
PA15 | — — | LED2正极 |
五、串口数据
Rd-03E模组通过串口(TTL电平)与外界通信,雷达串口默认波特率为256000,1停止位,无奇偶校验位。雷达输出检测到的运动/微动/无人状态以及距离信息。
Rd-03E 数据通信使用小端格式,以下表格中所有数据均为十六进制,数据帧格式如下:
帧头 | 目标状态 | 距离信息 | 帧尾部 |
---|---|---|---|
AA AA | 1byte | 2byte | 55 55 |
目标状态值 | 说明 |
---|---|
0x00 | 无目标 |
0x01 | 运动目标 |
0x02 | 微动目标 |
数据示例:AA AA 02 3C 00 55 55
红色部分表示目标状态,蓝色表示距离。
六、STM32数据处理
#define LED_ON_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
#define LED_OFF_2 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
#define LED_ON_4 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);
#define LED_OFF_4 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
#define LED_ON_6 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
#define LED_OFF_6 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
uint8_t RX_BUF[64]={
0}; //缓存数组
uint8_t RX_count=0; //计数位
uint8_t RX_temp; //缓存字符
uint16_t range; //感应距离
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//回调函数,检测到雷达发送一帧数据时进行处理
{
int i=0;
if(huart == &huart1){
RX_BUF[RX_count++] = RX_temp;//将缓存字符存入缓存数组中
if(RX_BUF[RX_count-1] == 0X55 && RX_BUF[RX_count-2] == 0X55){
if((RX_BUF[0] == 0XAA)&&(RX_BUF[1] == 0XAA)&&(RX_BUF[5]==0X55)&&(RX_BUF[6]==0X55)){
//判断帧头帧尾
if(RX_BUF[2] == 0X01||RX_BUF[2] == 0X02) //有无人检测
{
range=RX_BUF[4];
range=(range<<8)|RX_BUF[3];//将小端格式下的距离数据如0X90 0X01转换成0X190
char str[32]={
0};
sprintf(str,"[%s:%d] range: %d\r\n",__func__,__LINE__,range);
HAL_UART_Transmit(&huart2,(uint8_t *)str,strlen(str),0xFFFF); //输出感应距离,单位:cm
if((range>0X0000)&&(range<=0X00C8)) //0-2米
{
LED_ON_2;
LED_OFF_4;
LED_OFF_6;
}
else if((range>0X00C8)&&(range<=0X0190)) //2-4米
{
LED_OFF_2;
LED_ON_4;
LED_OFF_6;
}
else if((range>0X0190)&&(range<=0X0258)) //4-6米
{
LED_OFF_2;
LED_OFF_4;
LED_ON_6;
}
}
else if(RX_BUF[2] == 0X00) //无人
{
LED_OFF_2;
LED_OFF_4;
LED_OFF_6;
}
}
while(HAL_UART_GetState(&huart2)==HAL_UART_STATE_BUSY_TX);//判缓存数组是否发送完毕
memset(RX_BUF,0x00,sizeof(RX_temp));//清空缓存数组
RX_count = 0;//计数位置零
}
HAL_UART_Receive_IT(&huart1,&RX_temp,1);//串口1继续接收数据
}
}
七、效果演示
八、源码地址和固件
源码地址:https://axk.coding.net/p/stm32_rd-03/d/Rd-03E_LED_demo/git
联系我们
官方网址: https://www.ai-thinker.com
Docs:https://docs.ai-thinker.com
官方论坛: http://bbs.ai-thinker.com