目录
例程下载地址
链接: https://pan.baidu.com/s/192R3bul0AfP5plb6ud1NmA
提取码: j94u
文档说明
本文档基于STM32硬件开发板测试
本例程适用北醒单点系列雷达TFluna、TFmini-S、TFmini-Plus、TF02-Pro
本例程仅适用于北醒标准通讯协议下的雷达
北醒串口标准通讯协议
硬件接线
使用USART2作为TFLidar的通讯端口,接线如下:
TFlidar | 开发板 |
---|---|
红色线(+5V) | +5V |
绿色线(TX) | PA2(RX) |
黑色线(GND) | GND |
Lidar通讯代码
各例程均使用 USART1用于连接TFLidar,采用空闲中断方式,接收数据。
具体实现步骤如下:
1.初始化USART1。
2.开启USART1的空闲中断。
HAL_UART_Receive_DMA(&huart1, g_usart1_rx_buf, USART_BUF_SIZE);
HAL_UART_Receive_DMA(&huart2, g_usart2_rx_buf, USART_BUF_SIZE);
3.USART2_IRQHandler增加中断判断
代码如下:
uint32_t tmp = 0;
if((__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE) != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart2);
tmp = huart2.Instance->SR;
tmp = huart2.Instance->DR;
HAL_UART_DMAStop(&huart2);
tmp = USART_BUF_SIZE - hdma_usart2_rx.Instance->CNDTR;
HAL_UART_Receive_DMA(&huart2, g_usart2_rx_buf, USART_BUF_SIZE);
USART1_RX_Proc(g_usart2_rx_buf, tmp);
}
4.中断处理函数,用于接收雷达数据。
协议处理
Standard Data Format(89BYTE)协议 处理函数如下:
#define BW_TFLidar_DATA_Len 9`
#define BW_TFLidar_DATA_HEAD 0x59`
void USART1_RX_Proc(uint8_t *buf, uint32_t len)
{
uint32_t i = 0;
uint8_t chk_cal = 0;
uint16_t dist = 0;
uint16_t strength = 0;
uint16_t temp = 0;
if(BW_TFLidar_DATA_Len == len)
{
if((BW_TFLidar_DATA_HEAD == buf[0])&&(BW_TFLidar_DATA_HEAD == buf[1]))
{
for(i = 0; i < (BW_TFLidar_DATA_Len - 1); i++)
{
chk_cal += buf[i];
}
if(chk_cal == buf[BW_TFLidar_DATA_Len - 1])
{
dist = buf[2] | (buf[3] << 8);
strength = buf[4] | (buf[5] << 8);
temp = (buf[4] | (buf[5] << 8))/8-256;
printf("dist = %d cm; strength = %d; temp = %d.\r\n", dist,strength,temp);
}
}
}
}
注:换printf打印口
测试过程中如果需要更换串口打印
请在usart.c文件下更改 huart1或者huart2
PUTCHAR_PROTOTYPE
{
/* Place your implementation of fputc here */
/* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}