STM32C8t6 驱动激光雷达实战(二)
思岚激光雷达
文章目录
- 思岚激光雷达
- 前言
- 一、接线说明
- 二、效果实现
- 1.串口通信实现
- 2.激光雷达数据处理
- 3.PWM 控制激光雷达启停
- 三、完整代码
数据格式为:角度(°):距离(mm)。
STM32C8t6驱动激光雷达
前言
前面我们了解了激光雷达的原理,下面用C8T6驱动激光雷达
一、接线说明
激光雷达一共有 6 个引脚,其中 2 个 GND,2 个 5V,一对 RX 和 TX 引脚, 按照下表 1-1 的接线要求接在 STM32 单片机上。其中 2 个 5V 因为电流要求, 可以接在 TTL 转串口的 5V 引脚或者 ST Link 的 5V 引脚上。激光雷达的立贴座 端子不能直接与 STM32 连接,需将引脚用排线接出。
二、效果实现
1.串口通信实现
想要实现激光雷达数据的接收和发送,就需要将雷达接在串口上,因为串口 1 需要用来与电脑通信,所以这里选用串口 2,通过查找芯片手册可以找到串口 2 的 TX 引脚为 A2,RX 引脚为 A3。
注意:这里的串口 2 并不需要使用接收中断,因为雷达数据传输速度非常快, 如果使用中断的话很容易卡死在中断里。
在串口 1 的接收中断里,我们把接收到的数据通过串口 2 发送出去。
void USART1_IRQHandler(void) //串口 1 中断服务程序{ if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是 0x0d 0x0a 结尾){ Res =USART_ReceiveData(USART1); //读取接收到的数据USART_SendData(USART2,Res); //发送到串口 2while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET); //等待发送完成} }
在串口调试助手与 STM32 单片机的通信中,串口通信的波特率 115200、停 止位 1、数据位 8、校验位无,接收使用 16 进制。通过串口调试助手发送指令来 控制激光雷达时,需要勾选 16 进制发送,取消发送新行。
2.激光雷达数据处理
因为不用在串口 2 接收中断里接收数据,所以我们只需要判断 USART_SR 状态寄存器的 RXNE(读数据寄存器非空)位就可以了。接收到数据后,我们先 判断有效性,判断激光雷达发送数据第一位的质量是否满足要求(直接过滤掉质 量低的点),即判断质量是否为 0x3E,如果满足要求再将之后的 4 位数据接收进行处理。
if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)) // 串口寄存器接收到数据{Res =USART_ReceiveData(USART2); //读取接收到的数据if(flag){i++;if(i>4){flag=0;i=0;}if(i==2)printf("%d:",Res<<1); //打印角度数据(°)if(i==3)distan=Res>>2;if(i==4){result=Res;result=result<<6|distan; //整合距离数据printf("%d\r\n",result); // 打印距离数据(mm)}}
如果只是单纯想要接收数据的话可以将数据处理部分改为将接收到的数据 发送到串口 1。 处理数据的方式主要是通过移位操作来完成对数据的整合和解算,再将数据 通过 printf 的方式打印到串口 1 进行输出。因为激光雷达数据的校验位很少,通 过判断质量的方式来解算数据非常简单有效。
数据格式为:角度(°):距离(mm)。
3.PWM 控制激光雷达启停
和控制电机一样
TIM_SetCompare1(TIM2,1000); //电机开始转动,Compare1 最大值
TIM_SetCompare1(TIM2, 0); //设置 pwm,电机停止转动
三、完整代码
用正点原子的串口例程就行,主函数的代码改成下面的
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "key.h"
#include "TIMER.h"u8 scan[]={0xA5,0x20}; //开始扫描采样(SCAN)命令请求
u8 stop[]={0xA5,0x25}; //停止扫描命令
u8 Res,distan;
u16 result;
int main(void)
{u8 i,j,flag;u8 t=0; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart1_init(115200); //串口初始化uart2_init(115200); KEY_Init(); //按键初始化TIM2_PWM_Init(1000,71); //pwm初始化TIM_SetCompare1(TIM2, 0);//pwm设置输出低电平j=1;printf("开始\r\n"); // 打印距离数据(mm)while(1){if(j){ TIM_SetCompare1(TIM2,1000); //电机开始转动,Compare1最大值for (i=0;i<2;i++) //发送开始扫描指令{ USART_SendData(USART2,scan[i]);while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);}i=0;flag=0;//数据有效性标志while(1){if(USART_GetFlagStatus(USART2,USART_FLAG_RXNE)) // 串口寄存器接收到数据{Res =USART_ReceiveData(USART2); //读取接收到的数据
// USART_SendData(USART1,Res); //发送原始数据
// while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);if(flag){i++;if(i>4){flag=0;i=0;}
// if(i==1)if(!(Res&0x01))flag=0,i=0; //第二位C的奇偶校验if(i==2)printf("%d:",Res<<1); //打印角度数据(°)if(i==3)distan=Res>>2;if(i==4){result=Res;result=result<<6|distan; //整合距离数据printf("%d\r\n",result); // 打印距离数据(mm)}}if(Res==0x3E)flag=1; //有效性数据判断}t=KEY_Scan(); //单击结束if(t==KEY_PRE){ delay_ms(100);j=j^0x01;break;}}}}
}
STM32C8t6 驱动激光雷达实战(二)相关推荐
- STM32c8t6驱动激光雷达(一)
思岚A1激光雷达 前言 先来了解激光雷达 RPLIDAR A1M8 360 度激光扫描测距雷达是由 SLAMTEC 公司开发的低成本二维激光雷达(LIDAR)解决方案.它可以实现在二维平面的 12 米 ...
- [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店...
原文:[.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店 一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Bytear ...
- [.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现...
原文:[.NET领域驱动设计实战系列]专题八:DDD案例:网上书店分布式消息队列和分布式缓存的实现 一.引言 在上一专题中,商家发货和用户确认收货功能引入了消息队列来实现的,引入消息队列的好处可以保证 ...
- 【Qt】数据库实战(二)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 连接到数据库 04. 操作结果集 06. 附录 01. 概述 SQL即结构化查询语言,是关系数据库的标准语言.前面已经在Q ...
- 大白话DDD-领域驱动设计实战教程
全网独家第一套大白话领域驱动设计实战视频教程! DDD Domain-Driven Design ,DDD近几年的趋势也是越来越火了,很多中小型企业也慢慢开始落地DDD了,包括企业招聘中也是需要招聘需 ...
- Linux驱动开发:字符设备驱动开发实战
Linux驱动开发:字符设备驱动开发实战 一.工程创建 VSCode 创建工程,设置 C/C++ 配置,导入 linux kernel 源码目录,方便 vscode 写代码自动补全,vscode 配置 ...
- GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)
参考资料:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/17/2291200.html 因为使用ObjectDataSource自带的缓存机制无 ...
- CCNP精粹系列之十八--路由映射实战二,博主推荐文章
路由映射实战二 本篇博文和上一篇是紧密结合的,只是在上个试验的基础上作了改动,达到其他的试验效果. 试验二: 在R1上增加一个网段,并发布路由.这里采用三种方法. 如下是第一种,是在试验一的基础上直接 ...
- Taro多端开发实现原理与项目实战(二)
Taro多端开发实现原理与项目实战(二) 多端电商平台项目概述及开发准备 学习了前面的基础知识和进阶后是否跃跃欲试?我们准备了一个电商平台的项目来和大家一起实践使用 Taro 开发电商平台. 项目概述 ...
最新文章
- keil中使用Astyle格式化你的代码的方法-keil4 keil5通用
- matlab cell取一列,MATLAB cell struct
- parallels desktop虚拟机与Mac共享网络设置方法
- 面试问题汇总 精选 分析 解答 职业规划 part 4
- java bean 转json 串,终于找到了一篇能看懂的如何把javabean转换成json字符串的文章,嘿嘿,分享一下!...
- Ubuntu 18 LTS netplan 网络配置
- python基础学习--字符串和文件数据处理--附代码
- 小班安全使用计算机教案,小班教案安全用电
- 企业如何搭建物联卡云平台
- C#1所搭建的核心基础
- wpe修改充值_WPE修改基础第四课:封包分析教程
- python学习手册笔记
- 代码实现21种常见设计模式
- 学校能效管理系统解决方案-校园能源管理之智慧消防(安科瑞-须静燕)
- SPSS中T检验的作用以及使用前提
- mix3android auto,小米MIX3滑盖全面屏值不值得买?三天真实体验说说优缺点
- oracle快速回收表空间,drop user cascade_快速回收表空间大小
- Win11怎么搜索无线显示器?Win11查找无线显示器设备的方法
- 移动端行驶证、驾驶证识别OCR—移动互联神器
- Milky都能学会的C#编程(一)——编程是啥?可以吃吗?
热门文章
- 城市轨道交通运营管理属于什么院系_城市轨道交通运营管理系统专业
- 音域测试软件 电脑,音域太窄怎么办?教你这两个小方法,瞬间就能提升好几个档次!...
- 卡特兰数(高精度乘法压位)
- 适配器模式之篮球适配器案例
- [翻译] 使用开源库 JGDownloadAcceleration 控制下载队列,断点下载,加速下载
- 注意力机制用于推荐系统问题(DIN,DIEN,BERT4Rec,PRM)
- 安装flax INFO pip查看相关包版本兼容时间过长
- 根据手机品牌设置状态栏
- ftl文件模板图片_使用Freemarker导出Word文档(包含图片)代码实现及总结
- HarmonyOS 3.0升级后发现打游戏掉帧