STM32
直播中

李中宏

7年用户 1301经验值
私信 关注
[问答]

怎样去使用一种TOF Sense激光测距模块呢

TOF Sense激光测距模块与STM32有哪几种通信方式呢?
怎样去使用一种TOF Sense激光测距模块呢?



回帖(1)

李嘉元

2021-12-15 14:00:23
TOF Sense激光测距模块的使用(stm32)

2020年电子设计竞赛F题中用到了激光测距模块。我使用的是Tof-sense,其他的产品也是大同小异的,如下图:

该模块使用方式非常简单,与stm32有两种通信方式,一种是can,另一种是串口通信,这里采用串口通信,模块 的 TXD 连接stm32的 RXD,模块 的 RXD 连接stm32的 TXD。数据格式如下:
协议由 Frame Header(帧头)、Function Mark(功能字)、Data(数据)、Sum Check(校验和)组成。其中 Frame Header、Function Mark 为固定不变的数值;Data 为传输的数据内容,Sum Check 为 Frame Header、Function Mark、Data 相加求和(即前面所有字节相加)后的最低字节。 协议组成:Frame Header + Function Mark + Data + Sum Check.
官方示例如下:





根据以上内容,编写stm32串口通信的代码:

void USART2_IRQHandler(void)
{
      static u8 seri_count=0;
      u16 check_sum=0;   
      u8 i;
      static u8 flag=0;
      if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
     {        
                                                  
       if(USART_ReceiveData(USART2) == 0x57)
      {
         flag = 1;
      }
                        
      if(flag)
     {        
          USART2_RX_BUF[seri_count++] =USART_ReceiveData(USART2);
                                
         if(seri_count == 16)        
         {
             if(USART2_RX_BUF[0]==0x57 )
             {
                for( i = 0; i < 16-1; i++)
               {
                  check_sum += USART2_RX_BUF;            
               }
               if((check_sum & 0x00ff)== USART2_RX_BUF[15]) {
                                                                 TFMINI_Distance = (USART2_RX_BUF[10] <<16| USART2_RX_BUF[9]<<8|USART2_RX_BUF[8])/ 10;
                                                                 
                                                         }
              
                seri_count = 0;
                flag=0;
            }                                                
        }        
    }
   }  
}
这样就可以获得距离数据了!
举报

更多回帖

×
20
完善资料,
赚取积分