TFmini(Plus)在STM32上的应用

2023-05-16

STM32_TFmini

下载地址: 链接: https://pan.baidu.com/s/15IqhmbFTEHsLFydYbzir_w 提取码: 8iv1 复制链接打开

本文件夹为TFmini的STM32转接例程程序,使用STM32CubeMX、Keil作为开发工具。
其中:

  • 包含2种TFmini通讯协议,分别为:PIX、Standard Data Format(89BYTE))。
  • 包含3种转换方式:开关量、CAN、IIC。

TFmini连线

各例程均使用USART1作为TFmini的通讯端口,接线如下:

TFmini开发板
红色线(+5V)+5V
绿色线(TX)PA10(RX)
黑色线(GND)GND

TFmini通讯代码

各例程均使用 USART1用于连接TFmini,采用空闲中断方式,接收数据。

具体实现步骤如下:

1.初始化USART1、PA8。

2.开启USART1的空闲中断。

HAL_UART_Receive_DMA(&huart1, g_usart1_rx_buf, USART_BUF_SIZE);

__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //UART_IT_IDLE

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.中断处理函数,用于接收TFMINI数据。 可支持2种TFmini协议,只需使用不同的USART1_RX_Proc函数,可以自行集成。


USART_2_DOUT

USART_2_DOUT 为 USART转开关量例程。功能如下:

当 dist > TFMINI_ACTION_DIST, PA8 置低; 否则, PA8 置高。

其中, TFMINI_ACTION_DIST可通过main.c中的Configuration Wizard设置。

PA8用于开关量输出。

  • Standard Data Format(89BYTE)协议 处理函数如下:
`#define TFMINI_DATA_Len             9`

`#define TFMINT_DATA_HEAD            0x59`


`void USART1_RX_Proc(uint8_t *buf, uint32_t len)`

{

    uint32_t i = 0;
    uint8_t chk_cal = 0;
    uint16_t cordist = 0;

    if(TFMINI_DATA_Len == len)
    {
        if((TFMINT_DATA_HEAD == buf[0]) && (TFMINT_DATA_HEAD == buf[1]))
        {
            for(i = 0; i < (TFMINI_DATA_Len - 1); i++)
            {
                chk_cal += buf[i];
            }

            if(chk_cal == buf[TFMINI_DATA_Len - 1])
            {
                cordist = buf[2] | (buf[3] << 8);

                /*cordist > TFMINI_ACTION_DIST cm, PA8 set Low;
                  cordist <= TFMINI_ACTION_DIST cm, PA8 set High.*/
                if(HAL_GPIO_ReadPin(DOUT_GPIO_Port, DOUT_Pin) != GPIO_PIN_RESET)
                {
                    if(cordist > TFMINI_ACTION_DIST)
                    {
                        HAL_GPIO_WritePin(DOUT_GPIO_Port, DOUT_Pin, GPIO_PIN_RESET);
                    }
                }
                else
                {
                    if(cordist <= TFMINI_ACTION_DIST)
                    {
                        HAL_GPIO_WritePin(DOUT_GPIO_Port, DOUT_Pin, GPIO_PIN_SET);
                    }
                }
            }
        }
    }
}

  • PIX协议 处理函数如下:
`#define TFMINI_PIX_FLAG_END         0x0D0A     /*\r\n*/`

`#define TFMINI_PIX_FLAG_NEG         0x2D       /* - */`

`#define TFMINI_PIX_FLAG_DECPIONT    0x2E       /* . */`

`#define ASCII_0                     0x30       /*ASCII:0*/`

`void USART1_RX_Proc(uint8_t *buf, uint32_t len)`

{

    uint16_t cordist = 0;

    /*xxx.xx\r\n*/
    if((TFMINI_PIX_FLAG_END == (buf[len - 1] | (buf[len - 2] << 8))) \
        && (TFMINI_PIX_FLAG_DECPIONT == buf[len - 5]))
    {

        if(buf[0] == TFMINI_PIX_FLAG_NEG)   /*Negative, the amplitude value too low.*/
        {
            cordist = 1200;
        }
        else
        {
            cordist = ((buf[len - 6] - ASCII_0) * 100) + ((buf[len - 4] - ASCII_0) * 10) + (buf[len - 3] - ASCII_0);
            cordist+= (len == 7) ? ((buf[len - 7] - ASCII_0) * 1000) : 0;
        }

        /*cordist > TFMINI_ACTION_DIST cm, PA8 set Low;
          cordist <= TFMINI_ACTION_DIST cm, PA8 set High.*/
        if(HAL_GPIO_ReadPin(DOUT_GPIO_Port, DOUT_Pin) != GPIO_PIN_RESET)
        {
            if(cordist > TFMINI_ACTION_DIST)
            {
                HAL_GPIO_WritePin(DOUT_GPIO_Port, DOUT_Pin, GPIO_PIN_RESET);
            }
        }
        else
        {
            if(cordist <= TFMINI_ACTION_DIST)
            {
                HAL_GPIO_WritePin(DOUT_GPIO_Port, DOUT_Pin, GPIO_PIN_SET);
            }
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TFmini(Plus)在STM32上的应用 的相关文章

随机推荐

  • MAC 安装JD-GUI

    今天升级MAC系统到最新版本 12 0 1 xff0c 然后突然发现JD GUI xff08 v 1 6 xff09 运行不了了 然后就删除重新下载新的 xff0c 发现还是不行 xff0c 在网上搜资料 xff0c 都说需要修改运行文件
  • mysql使用笔记

    创建数据库 create database database name 删除数据库 drop database database name 创建表 span class token comment 最简单的语法 span span clas
  • 华为携手去哪儿、九牧等企业,共论鸿蒙生态发展蓝图

    11月5日 xff0c 在华为开发者大会2022 xff08 Together xff09 上 xff0c 华为携手中软国际 九牧集团 深开鸿 开鸿智谷 去哪儿 鸿湖万联6家鸿蒙合作伙伴代表 xff0c 分享了基于OpenHarmony技术
  • 桌面客户端框架技术选型

    摘自 技术怪咖 欧阳森林 作为客户端的架构选型主要面临以下几个方面的需求 xff1a 1 开发速度快 xff0c 能够快速迭代 xff0c 快速试错 2 客户端能够跨平台 xff0c 同时适应Windows和Mac平台 3 用户界面友好 x
  • python金融数据爬虫与数据分析学习(一)

    本文针对以下链接进行学习 链接 爬取东方财富网上的股票信息 由于后来发现爬的都是指数基金的股票 xff0c 便转向观看其它文章 目前发现一个比较好的python开源的财经数据包接口 xff0c Tushare Tushare简介 Tusha
  • 股票基础知识

    股票基础知识 定义沪股通 深股通 港股通动态市盈率 静态市盈率 TTM市盈率量比股息率前十大股东与前十大流动股东区别 tushare可以获取的信息日线行情每日指标个股资金流向沪深港股通持股明细沪深港通每日整体资金流向每日涨跌停统计港股通十大
  • kubernetes安装部署

    k8s是一款辅助管理容器的平台 负责容器的部署 xff0c 扩缩容和负载均衡 k8s集群是有master节点和work节点组成 xff0c master 一个 是主节点 xff0c 负责管理和控制 work是工作节点 xff08 很多 xf
  • js 中set去重并转为数组

    const items 61 new Set 1 2 3 4 5 5 去重 const array1 61 items 2 转成数组
  • fast lio测试

    fast lio2代码编译及运行 编译 fast lio2仓库地址 一 安装依赖 ubuntu18 43 ros环境下 xff0c pcl和eigen可默认使用ros自带版本 xff0c 所以只需安装 livox驱动包 livox ros
  • 机器人开发常见第三方库、软件安装和使用

    写在前面 大多数情况下 xff0c 没有人比官方更懂官方 xff0c 所以编译安装 库配置及简单使用优先看官方github仓库README或者官网 xff0c 当然不排除有些博文或者教程有更好的表达方式更详细的说明cmake 编译三件套 通
  • Android UDP 通信总结 (终于从坑中爬起来了)

    2018 08 02 最近做的项目要求为 xff1a 一端为电视端 xff0c 一端为手机端 xff0c 实现电视端与手机端通过UDP进行通信 解释 xff1a 就是两个机器在同一个局域网内 xff08 即两端连接的同一个WiFi xff0
  • ES6之Promise常见面试题

    ES6 谈一谈 promise 所有的 ES6 特性你都知道吗 xff1f 如果遇到一个东西不知道是 ES6 还是 ES5 你该怎么区分它 es6的继承和es5的继承有什么区别 promise封装ajax let const的优点 es6
  • docker容器内关于pip的trick

    在运行某个文本检测算法的时候 xff0c 运行setup py脚本 xff0c 生成了dist目录 xff0c 且在此目录下生成了 dlocr 0 1 SNAPSHOT tar gz文件夹 下一步需要pip install dlocr 0
  • 用两台TFmini Plus实现PPT切换

    1 PPT自动切换模块简介 本模块利用北醒公司两台TFmini Plus Arduino DUE板 一个低功率红外激光指向灯 两个LED指示灯 一个单向开关 一个双向开关和连接线结合设计 系统作用 xff1a 通过检测人的手势 xff0c
  • 用两台TFmini Plus实现 PPT切换

    1 PPT自动切换模块简介 本模块利用北醒公司两台TFmini Plus Arduino DUE板 一个低功率红外激光指向灯 两个LED指示灯 一个单向开关 一个双向开关和连接线结合设计 系统作用 xff1a 通过检测人的手势 xff0c
  • TFmini-Plus在Arduino上的开发例程

    TFmini Plus在Arduino上的开发例程 本例程以Arduino Uno 和 DUE板作为示例 xff0c 主要帮助客户快速熟悉我公司雷达 xff0c 减少产品的研发周期 关于Arduino的详细介绍请参考以下网站 xff1a 英
  • TFmini 常见问题与解答

    TFmini 是一款小型激光雷达模组 主要实现实时 无接触式的距离测量功能 xff0c 具有测量准确 稳定 高速的特点 TFmini常见问题与解答 Q xff1a 请问TFmini是否可以在水面检测 xff1f A xff1a 不建议在水面
  • TFmini和TFmini-Plus——激光雷达模组 资料汇总

    本文主要介绍TFmini和TFmini Plus激光雷达相关资料 目录 产品基本介绍产品基本FAQ与开源硬件的基本匹配其他 xff08 I C版参考方案 xff09 应用方案 一 产品基本介绍 产品规格书 产品使用说明等有关下载地址 xff
  • 使用数传电台无线远程传输雷达数据的参考方案

    本文介绍使用数传电台无线远程传输雷达数据的参考方案 方案概述 本方案为使用数传电台方式无线远程传输北醒TF系列雷达数据的参考方案 本方案中所使用的除TF激光雷达外的设备和工具并非北醒官方产品 xff0c 不提供任何官方售后服务 xff0c
  • TFmini(Plus)在STM32上的应用

    STM32 TFmini 下载地址 xff1a 链接 https pan baidu com s 15IqhmbFTEHsLFydYbzir w 提取码 8iv1 复制链接打开 本文件夹为TFmini的STM32转接例程程序 xff0c 使