Benewake(北醒) TF-Luna/TFmini-S/TFmini Plus/TF02-Pro/TF03 雷达UART模式下在51单片机上的运用

目录

1 本文档说明

2 测试环境说明

2.1 硬件环境说明:

2.2 软件环境说明:

3 硬件接线说明

3.1 接线图

3.2 接线定义表

4、硬件串口轮询方式读取雷达数据

雷达源码说明

4.1 雷达协议解析函数

4.2 雷达主函数

5、硬件串口中断方式读取雷达数据

雷达源码说明

5.1 雷达协议解析函数

5.2 雷达主函数

6、 烧录说明

7 输出测试

8 其它相关51例程源码请参考


1 本文档说明

本文档适用在北醒产品:TFmini\TFmini-s\TFmini-plus\TF02-pro\TF03  标品在默认配置下

 项目名称:北醒TF系列产品(Uart)在51系列芯片上的运用 V1.0.0
 适用产品:TFmini\TFmini-s\TFmini-plus\TF02-pro\TF03

 功能描述:   通过串口读取北醒单点系列雷达的距离与信号强度值

2 测试环境说明

2.1 硬件环境说明:

雷达:北醒单点系列激光雷达

TF-luna
TF-luna
TFmini-s
TFmini-PLUS

TF02-pro
TF03

开发板:STC15F408AS核心板

串口转接板:TTL转USB(CH340)

驱动链接:链接: 百度网盘 请输入提取码 提取码: 4a8y 

其它:母头杜邦线若干

2.2 软件环境说明:

电脑系统:Win 10

编程软件:Keil V5.28

烧录软件:  STC-ISP V6.88

串口助手:  SSCOM V5.13.1

3 硬件接线说明

3.1 接线图

3.2 接线定义表

转接板与核心板
TTL转USB板核心板
GND(黑)GND(黑)
RXD 转接板(白)TXD 核心板(白)
TXD 转接板(绿)RXD 核心板(绿)
VCC 5V(红色)VCC 5V(红色)
核心板和雷达
核心板雷达
GND(黑)GND(黑)
P30(绿) - MCU(RX)Lidar(绿) - TX
P31(白) - MCU(TX)Lidar(白) - RX
VCC 5V(红色)VCC 5V(红色)

注:雷达接线颜色请查考雷达使用说明书

4、硬件串口轮询方式读取雷达数据

源码链接: 百度网盘 请输入提取码 提取码: 7mv9 

雷达源码说明

4.1 雷达协议解析函数

/******************************************************************************
 TF系列 9 bytes output:
 [0x59, 0x59, distanceL, distanceH, strengthL, strengthH, tempL, tempH, checksum]
 *****************************************************************************/
void TF_Lidar_GetValue(TOF *Lidar_Data) {
    static unsigned char i = 0;
    unsigned char j = 0;
    unsigned int checksum = 0;
    static unsigned char rx[9];
    if(RI) {	//serialport receive a character
        RI = 0;
        rx[i] = SBUF;
        if(rx[0] != 0x59) {
            i = 0;
        } else if(i == 1 && rx[1]!= 0x59) {
            i = 0;
        } else if(i == 8) {
            for(j = 0; j < 8; j++) {
                checksum += rx[j];
            }
            if(rx[8] == (checksum % 256)) {
                Lidar_Data->distance = rx[2] + rx[3] * 256;
								Lidar_Data->strength = rx[4] + rx[5] * 256;
							  Lidar_Data->receiveComplete = 1;
            }
            i = 0;
        } else {
            i++;
        }
    }
}

4.2 雷达主函数

/************************主函数**************************************************/
void main()
{
    InitSerialPort(); 									//初始化串口
    printf("Hello, TFmini!\r\n");

    while(1)
    {
				TF_Lidar_GetValue(&Lidar_Data);
				if(Lidar_Data.receiveComplete == 1) {
						Lidar_Data.receiveComplete = 0;
					  printf("Dist = %d ,", Lidar_Data.distance);
						printf("AMP = %d\r\n", Lidar_Data.strength);
				}
    }
}

5、硬件串口中断方式读取雷达数据

源码链接: 百度网盘 请输入提取码 提取码: wjsx

雷达源码说明

5.1 雷达协议解析函数

/******************************************************************************
 TF系列 9 bytes output:
 [0x59, 0x59, distanceL, distanceH, strengthL, strengthH, tempL, tempH, checksum]
 *****************************************************************************/

/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{
    static unsigned char i = 0;
    unsigned char j = 0;
    unsigned int checksum = 0;
    static unsigned char rx[9];
    if(RI) {	//serialport receive a character
        RI = 0;
        rx[i] = SBUF;
        if(rx[0] != 0x59) {
            i = 0;
        } else if(i == 1 && rx[1]!= 0x59) {
            i = 0;
        } else if(i == 8) {
            for(j = 0; j < 8; j++) {
                checksum += rx[j];
            }
            if(rx[8] == (checksum % 256)) {
                Lidar_Data.distance = rx[2] + rx[3] * 256;
                Lidar_Data.strength = rx[4] + rx[5] * 256;
                Lidar_Data.receiveComplete = 1;
            }
            i = 0;
        } else {
            i++;
        }
    }
}

5.2 雷达主函数

/************************主函数**************************************************/
void main(void)
{

    S1_8bit();				//8位数据
    S1_USE_P30P31();		//UART1 使用P30 P31口	默认


    AUXR &= ~(1<<4);	//Timer stop		波特率使用Timer2产生
    AUXR |= 0x01;		//S1 BRT Use Timer2;
    AUXR |=  (1<<2);	//Timer2 set as 1T mode
    TH2 = (u8)(Timer2_Reload >> 8);
    TL2 = (u8)Timer2_Reload;
    AUXR |=  (1<<4);	//Timer run enable

    REN = 1;	//允许接收
    ES  = 1;	//允许中断

    EA = 1;		//允许全局中断

    while (1)
    {
        if(Lidar_Data.receiveComplete==1)		//收到过数据
        {
            Lidar_Data.receiveComplete = 0;
            printf("Dist = %d ,", Lidar_Data.distance);
            printf("AMP = %d\r\n", Lidar_Data.strength);
        }
    }
}

6、 烧录说明

  1. 选择对应的芯片
  2. 选择对应的COM口
  3. 选择已经编译好的HEX文件
  4. 点击下载固件文件并核心板重新上电
  5. 显示烧录成功

7 输出测试

8 其它相关51例程源码请参考

链接: 百度网盘 请输入提取码 提取码: uma9

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值