新手在STM32CubeIDE调通VL53L1X记录

由于公司项目人员调整,搞嵌入式的同事暂时在忙其他项目,有一个预研项目就交给小白的我头上了。项目任务是做一个在STM32芯片上调通激光测距模块VL53L1X。以下是一些项目过程的粗略记录。

1.开发板

这是做电子的同事在一块其他产品的板子给我飞线搞的,挺好的了。

 

2.搭建编程环境

这是STM32CubeIDE,嵌入式同事教我下载,说在这个软件上自己看着 mcu 的 datasheet 配一下引脚复用,就会自动生成工程,自己在里面填业务逻辑就行了

写了个流水灯,ST-LINK烧录进去,OK

3.了解IIC

我串口还行,在之前工作中用过,把他当成 tcp socket 收发数据就可以了(也要注意时序,全双工还是半双工)。但偏偏VL53L1X用的IIC通讯,对我来说是个完全未知的东西。心里挺彷徨的。迈出第一步,先了解这个通信总线的原理。

网上的教程很多,把一些关键字和特别之处记录一下:

  • 2根线,时钟+信号。但IIC总线一般是同一块板子的器件间通讯,其实mcu跟模块之间是共地的,所以严格来说是3根线
  • 半双工,支持多主多从。每次通讯都是master主动发起的
  • IIC不仅定义了物理层的信号时序,还规定了第一个发送的BYTE就是节点地址。一般来说通信协议就是发一个寄存器地址,后面接着要读写的值。

4.了解VL53L1X协议

从datasheet中,看到似乎是有一份叫官方API的资料,叫UM2356。搜索一下能找到API文档,但没有想象中的H文件和C文件。大概看了一下文档,文档管这一套东西叫【Driver】。其实我一直想知道驱动的定义是什么?如果是说对硬件接口做封装,屏蔽硬件细节,提供一套对软件工程师友好的编程接口,这样倒是可以理解。

于是上ST的官网,找到了这个

下载下来之后,解压一看,妥了!有代码。于是就集成到IDE的工程里

 按照资料文档,需要实现一个函数:

Note: The user has to implement the I2C functions prototyped in the vl53l1_platform.c file accordingly 

实现如下(已经忘记自己从哪里看来的了)

int _I2CWrite(VL53L1_DEV Dev, uint8_t *pdata, uint32_t count) {
    int status;
    int i2c_time_out = I2C_TIME_OUT_BASE+ count* I2C_TIME_OUT_BYTE;

    status = HAL_I2C_Master_Transmit(Dev->I2cHandle, Dev->I2cDevAddr, pdata, count, i2c_time_out);
    if (status) {
        //VL6180x_ErrLog("I2C error 0x%x %d len", dev->I2cAddr, len);
        //XNUCLEO6180XA1_I2C1_Init(&hi2c1);
    }
    return status;
}

int _I2CRead(VL53L1_DEV Dev, uint8_t *pdata, uint32_t count) {
    int status;
    int i2c_time_out = I2C_TIME_OUT_BASE+ count* I2C_TIME_OUT_BYTE;

    status = HAL_I2C_Master_Receive(Dev->I2cHandle, Dev->I2cDevAddr|1, pdata, count, i2c_time_out);
    if (status) {
        //VL6180x_ErrLog("I2C error 0x%x %d len", dev->I2cAddr, len);
        //XNUCLEO6180XA1_I2C1_Init(&hi2c1);
    }
    return status;
}

编译运行一下。居然正确地读出了模块的信息,测距功能也正常,把我高兴坏了。

5.总结

回顾整个摸索的过程:有人告诉你这条路是通的;于是 ①学一点理论 > ②结合自己的猜测实施验证 > ③看着报错继续修正自己的理解,回到①;不断在这个循环里面掉进坑里,最后走到想去的地方。因为隔行如隔山,要在别人的专业领域迈出一小步,要付出很多额外的努力去理解一套也许是全新理论知识,还要克服因为未知带来的恐惧和焦虑,而且无可避免因为不得要领做了很多无用功,很有挫败感。

也许这就是工作和学习的区别。学校会帮我们构建好理论体系,让我们的判断和实践有迹可循,要花费的功夫,期望得到的效果,基本可控,不需要过多的瞻前顾后。

但是加油阿,还在挣扎的弟兄们!好好学习,天天向上!

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值