科学妞妞 发表于 2026-3-24 06:53:32

nekdyldm 发表于 2026-3-23 10:14
芯片是stc15w408as

我手上没有同款芯片,不然,倒也方便帮忙移植一下。不过,别急。问一下Ai,有原32G程序做参考,移植到15w,问一下就行。不用自己烦恼的。

C_wolf 发表于 2026-4-19 23:41:51

摄像头不需要初始化和校正环节么,上电直接读数据?

科学妞妞 发表于 2026-4-20 09:13:09

C_wolf 发表于 2026-4-19 23:41
摄像头不需要初始化和校正环节么,上电直接读数据?

看一下,程序中有初始化部分,任何外设,都要初始化的。{:4_165:}

C_wolf 发表于 2026-4-20 11:17:57

科学妞妞 发表于 2026-4-20 09:13
看一下,程序中有初始化部分,任何外设,都要初始化的。

不好意思,我只看到了单片机初始化和显示屏初始化,请问摄像头参数初始化是哪个?

大叶子 发表于 2026-4-22 15:54:21

C_wolf 发表于 2026-4-20 11:17
不好意思,我只看到了单片机初始化和显示屏初始化,请问摄像头参数初始化是哪个? ...

// 软件 I2C 函数(VL53L0X)- 标准协议,含ACK检查
void I2C_Start(void)
{
    SDA = 1; SCL = 1; delay_us(5);
    SDA = 0; delay_us(5);
    SCL = 0; delay_us(5);
}

void I2C_Stop(void)
{
    SDA = 0; SCL = 1; delay_us(5);
    SDA = 1; delay_us(5);
}

void I2C_SendByte(u8 dat)
{
    u8 i;
    for (i = 0; i < 8; i++) {
      if (dat & 0x80) SDA = 1;
      else            SDA = 0;
      dat <<= 1;
      delay_us(2);
      SCL = 1; delay_us(2);
      SCL = 0; delay_us(2);
    }
    SDA = 1; delay_us(2);
    SCL = 1; delay_us(2);
}

u8 I2C_CheckAck(void)
{
    u8 ack = 0;
    if (SDA == 0) ack = 1;
    SCL = 0; delay_us(2);
    return ack;
}

// ... I2C读写函数完整版见附件

//==========================================================================
// VL53L0X 寄存器定义
#define VL53L0X_ADDR   0x29
#define REG_IDENTIFICATION_MODEL_ID         0xC0
#define REG_SYSRANGE_START                  0x00
#define REG_RESULT_RANGE_STATUS            0x14

u8 gbuf;

// 块读取函数(一次性读取12字节距离数据)
void read_block_data_at(u8 reg, u8 len, u8 *buf)
{
    u8 i;
    I2C_Start();
    I2C_SendByte((VL53L0X_ADDR << 1) | 0);
    I2C_CheckAck();
    I2C_SendByte(reg);
    I2C_CheckAck();
    I2C_Stop();

    I2C_Start();
    I2C_SendByte((VL53L0X_ADDR << 1) | 1);
    I2C_CheckAck();
    for (i = 0; i < len; i++) {
      buf = I2C_ReadByte();
      if (i == len - 1) I2C_SendNak();
      else I2C_SendAck();
    }
    I2C_Stop();
}

C_wolf 发表于 2026-4-22 21:36:42

大叶子 发表于 2026-4-22 15:54
// 软件 I2C 函数(VL53L0X)- 标准协议,含ACK检查
void I2C_Start(void)
{


你说的是I2C外设初始化,我问的是VL53L0X的初始化。

就像SPI液晶屏一样,先初始化SPI,在通过SPI初始化液晶void LCD_Init(void)

void VL53L0X_Init(void)不需要么???

大叶子 发表于 2026-4-25 23:04:17

C_wolf 发表于 2026-4-22 21:36
你说的是I2C外设初始化,我问的是VL53L0X的初始化。

就像SPI液晶屏一样,先初始化SPI,在通过SPI初始化 ...
你说对了,VL53L0X是I2C外设,就像SPI液晶屏一样,先初始化SPI{:qiang:}

C_wolf 发表于 2026-4-27 21:26:57

大叶子 发表于 2026-4-25 23:04
你说对了,VL53L0X是I2C外设,就像SPI液晶屏一样,先初始化SPI

服了!
你是听不懂,我在问什么吗?
还是你不知道怎么初始化VL53L0X的寄存器,这个程序只是照搬来的。{:cahan:}

科学妞妞 发表于 2026-4-28 12:55:26

C_wolf 发表于 2026-4-27 21:26
服了!
你是听不懂,我在问什么吗?
还是你不知道怎么初始化VL53L0X的寄存器,这个程序只是照搬来的。 ...
默认连续测量模式。如果需要初始化设置并调整VL53L0X的寄存器,可以改默认设置,使其功能强大,可以实现许多功能。但是,要查官方寄存器,需要重新整理测试,需要时间深入研究。

C_wolf 发表于 2026-4-28 13:43:42

科学妞妞 发表于 2026-4-28 12:55
默认连续测量模式。如果需要初始化设置并调整VL53L0X的寄存器,可以改默认设置,使其功能强大,可以实现许 ...

嗯嗯,是的。
感谢明白人的回复。{:4_196:}
页: 1 [2]
查看完整版本: 【分享】VL53L0X激光测距 (STC32G) + ST7735显示 完整代码与分析