楼主: uniqueeefocus41

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

  [复制链接]

该用户从未签到

发表于 2016-6-27 16:53:42 | 显示全部楼层
分享到:
朋友,我想请教你一下,关于GP2读结果寄存器的问题,在测量范围2中,结果寄存器数值是基准时钟周期的倍数,但是32位的结果寄存器,高16位表示整数,低16位表示小数部分,它这个倍数不是指的整数倍吗?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2016-6-29 09:18:19 | 显示全部楼层
谢谢楼主
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-9-8 15:21
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-9-8 11:13:06 | 显示全部楼层
    谢谢分享,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-11-7 12:07
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-9-29 09:29:48 | 显示全部楼层
    学习下。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-11-7 12:07
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-11-7 12:12:01 | 显示全部楼层
    问下为啥我用程序控制TDC-GP21,读出来的结果始终不变的哇?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-12-15 22:57:53 | 显示全部楼层
    这个我是要来支持一下的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2017-1-13 16:54:26 | 显示全部楼层
    楼主很厉害啊,现在还在做激光测距吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-26 08:40
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-4-26 08:33:03 | 显示全部楼层
    问一下你用的是什么激光传感器呢?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2018-11-28 15:41:26 | 显示全部楼层
    你好,我在调试GP21,SPI通信测试一直通不过。目前我只初始化了IO口,复位,测试(给寄存器1写入数据、写入操作码0xb5,读取8位数据)

    #include "gp21.h"

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

    void SPI2_TDC_INIT(void)
    {
             GPIO_InitTypeDef  GPIO_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;
    }

    可以帮我分析以下问题在哪吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2020-4-26 09:32:26 | 显示全部楼层
    谢谢分析,学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 12:20 , Processed in 0.184651 second(s), 31 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.