uniqueeefocus41 发表于 2013-8-1 23:55:48

STM32下开发的TDC—GP2激光测距源代码

这是在上学期接的一个激光的项目,用的是TDC-GP21测量模块。自己写的基于32下的源代码和大家分享啦。

cmyldd 发表于 2021-1-6 10:43:27

优秀的人才!

fengtong2018 发表于 2020-9-25 16:11:38

楼主,优秀了!
有兴趣我们聊聊

seventcheng 发表于 2020-4-26 09:32:26

谢谢分析,学习

flushbonading 发表于 2018-11-28 15:41:26

你好,我在调试GP21,SPI通信测试一直通不过。目前我只初始化了IO口,复位,测试(给寄存器1写入数据、写入操作码0xb5,读取8位数据)

#include "gp21.h"

void DelayNS(unsigned long dly)
{
         unsigned inti;
               for(i=0;i<dly;i++);
}

void SPI2_TDC_INIT(void)
{
         GPIO_InitTypeDefGPIO_Initure;
         __HAL_RCC_GPIOE_CLK_ENABLE();

         GPIO_Initure.Pin=GPIO_PIN_12|GPIO_PIN_14;
   GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOE,&GPIO_Initure);

         GPIO_Initure.Pin=GPIO_PIN_13;
   GPIO_Initure.Mode=GPIO_MODE_INPUT;                  //输入
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    HAL_GPIO_Init(GPIOE,&GPIO_Initure);
}

void TDC_Configuration(void)
{
         GPIO_InitTypeDef GPIO_Initure;
         
      __HAL_RCC_GPIOD_CLK_ENABLE();
      __HAL_RCC_GPIOG_CLK_ENABLE();
         
         GPIO_Initure.Pin=GPIO_PIN_11;//GPIO_PIN_9|GPIO_PIN_10|
   GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOD,&GPIO_Initure);

         GPIO_Initure.Pin=GPIO_PIN_5;//|GPIO_PIN_7
   GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;          //推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;                     //高速
    HAL_GPIO_Init(GPIOG,&GPIO_Initure);
}

void TDC_RESET(void)
{
         SET_TDC_RESET();
         DelayNS(100);
         CLR_TDC_RESET();
         DelayNS(100);
         SET_TDC_RESET();
         DelayNS(100);
}

unsigned char Test_SPI_Communicate(void)
{

         int register1 = 0x81ffffff;

      unsigned char test_reg=0xb4; //读结果寄存器5,反映寄存器1 的高8 位
      unsigned char test_reg0=0x00;
//         unsigned char test_reg1=0x81; //读结果寄存器5,反映寄存器1 的高8 位

      DelayNS(500);
      CLR_TDC_NSS();
      DelayNS(5);
         for (int i=0;i<32;i++)
         {
               SET_TDC_SCK();
               DelayNS(5);
               if (register1&0x80000000)
               {
                         SET_TDC_SI();
         }
               else
                         CLR_TDC_SI();
               DelayNS(5);
               CLR_TDC_SCK();
               DelayNS(5);
               register1=register1<<1;
         }
         DelayNS(5);
      SET_TDC_NSS();


      DelayNS(500);
      CLR_TDC_NSS();
      DelayNS(5);
         for (int i=0;i<8;i++)
         {
               SET_TDC_SCK();
               DelayNS(5);
               if (test_reg&0x80)
                         SET_TDC_SI();
               else
                         CLR_TDC_SI();
               DelayNS(5);
               CLR_TDC_SCK();
               DelayNS(5);
               test_reg=test_reg<<1;
         }

         for(int j=0;j<8;j++)
         {
               SET_TDC_SCK();
               DelayNS(5);
               test_reg0=test_reg0<<1;
               if (HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_13) ==0)
               {
                         test_reg0 &=0x01;
               }
               else
               {
                         test_reg0 |=0x01;
               }
               CLR_TDC_SCK();
               DelayNS(5);
         }
      SET_TDC_NSS();
      return test_reg0;
}

可以帮我分析以下问题在哪吗

Altium-381237 发表于 2017-4-26 08:33:03

问一下你用的是什么激光传感器呢?

章鱼龙 发表于 2017-1-13 16:54:26

楼主很厉害啊,现在还在做激光测距吗?

黄叔朗 发表于 2016-12-15 22:57:53

这个我是要来支持一下的

yigehaorens 发表于 2016-11-7 12:12:01

问下为啥我用程序控制TDC-GP21,读出来的结果始终不变的哇?

yigehaorens 发表于 2016-9-29 09:29:48

学习下。。。
页: [1] 2 3 4
查看完整版本: STM32下开发的TDC—GP2激光测距源代码

Baidu
map