STM32基于毫米波雷达的生命体征检测系统

这篇具有很好参考价值的文章主要介绍了STM32基于毫米波雷达的生命体征检测系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

毫米波雷达模块选择

毫米波雷达我选择的了Seeedstudio企业的淘宝官方店铺,毫米波雷达包含有呼吸心跳检测雷达,人体存在感应雷达,睡眠呼吸等等,其单个模块并非只有单一功能,需要开发者根据原始数据分析解析。

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

硬件连接示意图

 毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

原始数据分析

由于毫米波模块是默认输出的,一直在不停歇的发送数据,所以或者原始数据可通过直接连接USB-TTL或者与STM32连接,串口打开就可以发现串口出现数据啦

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

在SEEK官网又说明每一位数据的意义,部分数据解析如下 

 毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

 该数据由帧头:0x53 0x59,控制字:0x80,命令字:0x81,长度标识符:0x00 0x01,数据:0x0F,   校验和:1Byte (SUM),帧结束:0x54 0x43

最终数据解析显示

根据原始数据,我们可通过STM32的DMA将接收到的原始数据单字节的进行解析,逐一的进行判断,部分代码如下:

串口获取原始数据

usart.c

void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(uartHandle->Instance==USART1)
  {
  /* USER CODE BEGIN USART1_MspInit 0 */

  /* USER CODE END USART1_MspInit 0 */
    /* USART1 clock enable */
    __HAL_RCC_USART1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART1 GPIO Configuration
    PA9     ------> USART1_TX
    PA10     ------> USART1_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_9;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_10;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART1_MspInit 1 */

  /* USER CODE END USART1_MspInit 1 */
  }
  else if(uartHandle->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspInit 0 */

  /* USER CODE END USART2_MspInit 0 */
    /* USART2 clock enable */
    __HAL_RCC_USART2_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART2 GPIO Configuration
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* USART2 DMA Init */
    /* USART2_RX Init */
    hdma_usart2_rx.Instance = DMA1_Channel6;
    hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_usart2_rx.Init.Mode = DMA_CIRCULAR;
    hdma_usart2_rx.Init.Priority = DMA_PRIORITY_LOW;
    if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);

    /* USART2 interrupt Init */
    HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USART2_IRQn);
  /* USER CODE BEGIN USART2_MspInit 1 */

  /* USER CODE END USART2_MspInit 1 */
  }

}

数据处理函数

Data.c

void ProcessRx(uint8_t *buff, uint8_t size)
{
    /****************************************************************************/
    uint8_t receivedbyte, rx_sum, command;
    //Êý¾Ý´æ´¢Êý×é
    uint8_t rx_data[10];

    uint16_t rx_dategram_len;
    while (size)
    {
        switch (rx_datagram_state)
        {
        case IDLE: //ÔÚ¿ÕÏÐʱ£¬ÅжÏÊÇ·ñ¶ÁÈ¡Ö¡Í·1
        {
            receivedbyte = *buff;
            if (BEGIN1 == receivedbyte)
            {
                // printf("HEADER1:%x\r\n", *buff);
                rx_sum = 0;
                rx_sum += receivedbyte;
                rx_datagram_state = SEEN_HEADER1;
                buff++;
            }
            break;
        }
    case ...:
    case ...:
    case ...:
    case ...:
    case ...:

  
          case SEEN_SUM:
        {
            rx_datagram_state = (MD_END1 == *buff) ? SEEN_END1 : IDLE;
        }
        break;

        case SEEN_END1: 
        {
            rx_datagram_state = (MD_END2 == *buff) ? SEEN_END2 : IDLE;
        }
        break;

        case SEEN_END2: 
        {
            //    rx_flag = 1;
            rx_datagram_state = IDLE;
        }
        break;


        default:
        {
            receivedbyte = 0;
            rx_datagram_state = IDLE;
            size = 0;
            break;
        }
        }
        size--;
    }

              



中断处理函数

it.c

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */

  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
	USER_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */

  /* USER CODE END USART2_IRQn 1 */
}

主函数代码

main.c

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

实验效果展示

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

毫米雷达模块和单片机的连接,物联网,嵌入式,毫米波雷达,单片机,stm32,物联网

该模块有最大的缺点:当多人出现在模块的测量范围时会出现检测不准,出现不稳定情况等等。

除此之外,还有睡眠呼吸等等均类似。文章来源地址https://www.toymoban.com/news/detail-792384.html

到了这里,关于STM32基于毫米波雷达的生命体征检测系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TI毫米波雷达笔记】MMwave毫米波雷达API配置及驱动(以IWR6843AOP为例)

    【TI毫米波雷达】MMwave毫米波雷达API配置及驱动(以IWR6843AOP为例) MMWave API(位置处于BSS)可以被DSS和MSS调用 通过Mailbox进行数据通信 毫米波雷达接口 首先搞清楚 mmwave时雷达射频整体 每秒发送很多frame(帧) frame下面有chirp 比如96个chirp 所以当发送开始时 会连续发送96个chi

    2024年02月09日
    浏览(55)
  • 毫米波雷达实时采集教

    https://www.cnblogs.com/dhyc/p/10510876.html 毫米波雷达实时采集教程---- 雷达资料分享——RSP1 多普勒雷达开发套件

    2024年02月08日
    浏览(52)
  • 4D毫米波雷达和3D雷达、激光雷达全面对比

              众所周知,传统3D毫米波雷达存在如下性能缺陷:         1)静止目标和地物杂波混在一起,难以区分;         2) 横穿车辆和行人多普勒为零或很低,难以检测;         3) 高处物体和地面目标不能区分,容易造成误刹,影响安全性;        

    2024年02月05日
    浏览(58)
  • 毫米波雷达:从 3D 走向 4D

    2024年01月02日
    浏览(61)
  • 【Apollo】自动驾驶感知——毫米波雷达

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 本文用于投稿于星火培训:报名链接 毫米波雷达分类毫米波雷达的信号频段毫米波雷达工作原理车载毫米波雷达

    2024年02月12日
    浏览(50)
  • 车载毫米波雷达的校准问题(1)

        任何精密的传感器都需要进行校准,校准的目的在于使测量的结果更加准确。车载毫米波雷达作为一个车规级的可能关系到生命安全的传感器,其测量结果的准确性显得尤为重要。 但是车载毫米波雷达(或者说任何传感器)的校准这个话题很大,涉及的东西有很多,想要详

    2023年04月21日
    浏览(66)
  • 毫米波雷达的硬件架构与射频前端

        本篇博文梳理(车载)毫米波雷达的系统构成,特别地,对其射频前端各部件做细节性的原理说明。本篇博文会基于对这方面知识理解的加深以及读者的反馈长期更新内容和所附资料,有不当之处或有其它有益的参考资料可以在评论区给出,我们一起维护,我会定期完善。

    2024年02月05日
    浏览(43)
  • 综述:自动驾驶中的 4D 毫米波雷达

    论文链接:《4D Millimeter-Wave Radar in Autonomous Driving: A Survey》 4D 毫米波 (mmWave) 雷达能够测量目标的距离、方位角、仰角和速度,引起了自动驾驶领域的极大兴趣。这归因于其在极端环境下的稳健性以及出色的速度和高度测量能力。 然而,尽管与其传感理论和应用相关的研究迅

    2024年01月18日
    浏览(47)
  • 毫米波雷达系列 | 传统CFAR检测(均值类)

    CFAR检测器主要用于检测背景杂波环境中的雷达目标,常见的均值类CFAR检测器包括单元平均检测器(CA-CFAR)、选择最大检测器(GO-CFAR)、选择最小检测器(SO-CFAR)。 CFAR检测器的性能取决于窗口的大小和形状,以及阈值的设置。通常,选择合适的窗口和阈值需要进行大量的实验和测试

    2024年02月08日
    浏览(41)
  • 毫米波雷达-2D-CFAR算法

    目录 前言 一、什么是CFAR算法? 二、CFAR算法的基本原理 三、实现2D-CFAR算法的示例 四、MATLAB仿真结果 雷达技术在军事、航空、气象等领域扮演着至关重要的角色,而在雷达信号处理中,恒虚警率(CFAR)算法被视为一种重要的工具,用于检测信号中的目标并过滤掉噪声。本文

    2024年04月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包