基于STM32H743的APDS-9930调试心得
文章目录
- 前言
- 一、应用平台
- 二、使用步骤
- 1.Cube配置
- 2.所用库函数
- 3.APDS-9930寄存器配置
- 总结
前言
作为一个硬件开发新手,第一次接触这个传感器,感觉功能实现还是比较简单。先介绍一下这个传感器:简单来说就是一个集成了数字式环境光传感(ALS)、红外LED和一个完整的接近检测系统的八脚封装的芯片。我购买的是淘宝的小模块,不用自己搭建电路,只用通讯使用功能就行。
一、应用平台
芯片使用的STM32H743VITX。开发平台是基于STM32CubeMX的HAL库。硬件的原始资料均来源于其技术手册。
二、使用步骤
1.Cube配置
网上资料很多关于Cube就不讲太多,说一点注意事项吧。Cube先从时钟开始配起,不要一来就先把功能配上去,有时候会出现一些莫名其妙的问题,主要就体现在逻辑分析仪上面。外部输入的时钟在选择DIVM1的时候选择可以整除的数字。H7最大支持480M时钟,使用的时候一般就往最高的配。下面是我自己配的一个时钟。
APDS-9930使用I2C支持快速I2C原文描述是(Up to 400 kHz (I2C Fast-Mode)),所以在配置时可以选择高一点的速率。I2C的配置没啥配的就速率控制。这里我们选择快速模式。把中断全部打开。NVIC的钩钩打上,这里暂时不用DMA,以后有需求再来更新。在硬件上我使用的是I2C1,软件上对应选择。如果默认选择时与自己硬件端口不一致,可以直接点击右边芯片上面的管脚先选择功能,此时管脚为黄色,说明此时没有配置上,当在左边进行配置后,管脚转为绿色说明配置成功。同时管脚按照自己的意愿进行了选择。
后面就是工程的一般配置。我使用的Keil uVision5选择MDK-ARM 版本这里选择V5.27,大家可以根据自己的版本来进行选择。
接下来就是自己代码生成的一般选项,我比较喜欢分开放置(勾选Generated files的第一个选项),这样有助于自己分类各种不同通讯协议的器件。
至此就可以点击GENERATE CODE,生成自己的工程代码进行下一步操作。
2.所用库函数
对于I2C的通讯主要使用了两个函数
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress,uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
其中
I2C_HandleTypeDef *hi2c 是I2C的句柄,使用哪一个就写哪一个
uint16_t DevAddress 是设备地址,APDS-9930最奇葩的设定(自我感觉),手册写了设备地址是0x39原文为(The device supports a single slave address of 0x39 hex using 7 bit addressing protocol.)但是在实际使用中却需要左移一位,这个问题让我一度以为这是一个损坏的传感器。但看到回传波形时一度感动涕零。
uint16_t MemAddress 是寄存器地址,在技术手册中给出了寄存器的列表以及分别所表达的含义。下面两张图进一步揭示了我们如何来填写这个寄存器地址。首先,最高位第7位为1,其次,6:5指示了命令的方法,这里我使用的是00,一点问题没有,后面就是就是寄存器的地址,所以这里我的写法使用0x80 | Reg。
uint16_t MemAddSize 是 内部地址读写方式,只有I2C_MEMADD_SIZE_8BIT 和 I2C_MEMADD_SIZE_16BIT两种
uint8_t *pData 写入的数据指针
uint16_t Size 读取的字节数
uint32_t Timeout 超时时间
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
写入和读取参数基本上大同小异,写数据时建议一个一个的写,这样变量比较好控制,同时在计算其他数据时也比较好引用。
3.APDS-9930寄存器配置
首先是启用接近传感器的功能,下图揭示了在0x00的寄存器里面的这个字节中需要需要写入的相应位。这里测距离的话我们只需要关心接近测距功能的启用也就是将PEN位置一,以及将PPULSE(0x0E)设置为0x08(官方推荐,原文为:100 mA and 8 pulses are the recommended driving conditions. )。这样就可以读取接近寄存器(0x18和0x19的值)。后续有厂家对接近传感器的测距测试曲线,我们可以拿来与自己的数据拿来对应。在CONTROL(0xF)寄存器中,有对增益(PGAIN)进行设置,这可以改变测量的范围。keil 5自带有逻辑分析仪用于参考。
接近寄存器在不同设定值下厂家测试曲线
其还有红外光检测的功能,将AEN和PON置一就可以了。然后读取(CH0和CH1)的值按照给出的计算公式进行计算。AGAIN的值在上文的CONTROL寄存器里面,可以查看后代入计算。计算公式和例子在下文中给出。所求值的正确性有待考证,手头没有专业的测量工具进行测试。总之越亮值越大。
总结
以上便是APDS-9930的两大功能的调试,具体的实验结果就留给看官自己起摸索吧。本人在使用逻辑分析仪时,对结果还是比较满意,能够实现对距离的测量,但是其中断的功能并不是我关注的重点所以并没有深究其中。有不正之处希望看官批评指正。
基于STM32H743的APDS-9930调试心得相关推荐
- 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得(二)-设备树刷厂商给的触摸屏固件...
之前调试触摸屏的文章如下: 基于瑞芯微RV1109 Linux触摸屏GT911驱动调试心得_Bruce.yang的嵌入式之旅-CSDN博客 由于之前调触摸屏一直都对不上点,然后厂商又给了我新的驱动代码 ...
- AT91RM9200+pcf8563在linux2.6.20下的调试心得
这两天调试了AT91RM9200+pcf8563在linux2.6.20下的驱动,记录一下我的调试过程以及调试心得,呵呵 在linux2.6.20/drivers/rtc目录下面已经有了pc ...
- 基于matlab的dsp调试方法,基于Matlab7.0的DSP调试
基于Matlab7.0的DSP调试 通过Matlab7.0中的CCSLink与CCS3.3软件连接,实现对DSP程序的调试. CCSLink的主要特点:在MATLAB环境下完成对DSP器件的调试.数据 ...
- electron 打开调试_构建基于 iOS 模拟器的前端调试方案
作者:imyzf 本文将为大家介绍自动化控制 iOS 模拟器的原理,为开发基于 iOS 模拟器的前端调试方案提供帮助. 我们在开发 iOS App 内的前端页面时,有一个很大的痛点,页面无法使用 Sa ...
- 浅谈四轴PID调试心得
以下内容转自阿莫论坛,写得很详细,是调试大四轴的.小四轴调试也可参照着调. PID调试心得 本人不是自动化出身,也没有受过专业训练,都是自己摸索,在这里浅述一下自己的PID参数整定心得.所言之物皆由实 ...
- 调试心得plc做主站(客户端)
##调试心得plc做主站(客户端) 调试软件,西门子博图15,PLC采用1200,协议抓包采用Wireshark抓包工具 发协议工具采用网络助手,绿色是PLC给我发的请求数据,蓝色我发的报文格式, 1 ...
- Ti ub954/953 Sensor调试心得
Ti ub954/953 Sensor调试心得 前言 TI以及美信的串行器以及接串器是目前车载领域用的比较多的厂家,目前最近一直再用TI的954以及953进行双目sensor的调试,下面就简单记录下调 ...
- 阻容压降电路调试心得
阻容压降电路调试心得 阻容压降电通常用于LED灯电源,智能电表等对成本要求较高的产品中.先说一下LED电源,L线进来后,串联0.39微法油铁电容,后面是全桥整流,然后是滤波,电容容量越大,电路输出的电 ...
- 记spi nor flash的调试心得
flash 调试心得 前言 调试目的 调试步骤 检查 驱动 flash操作 改写 复位 访问模式 tips 内核下相关 文件系统 nor和nand的区别 前言 在工作中或者在开发板上或多或少都会遇到n ...
- STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码
STM32H743 SOEM EtherCAT基于STM32H743芯片和SOEM的EtherCAT主站源码 提供配套CUBE工程 STM32H743 SOEM EtherCAT基于STM32H743 ...
最新文章
- Linux下安装Oracle11g服务器(centos7下)
- 最新!2020中国高校毕业生薪资报告出炉
- Linux命令(持续更新)
- BroadCastReceiver简介
- MySQL中MyISAM 与innoDB的区别(转)
- Ext之Combobox的远程加载数据实例(附前后台代码)
- Cortex-M3-建立向量表
- 这个外挂要上天了!教一千遍都不会的数理技巧,还不如搞懂最根本的概念!
- 基于JAVA+SpringMVC+Mybatis+MYSQL的考勤管理系统
- ubuntu更新显卡驱动到460.84,升级cuda版本到11.2
- 多页Excel转换成PDF时如何保存为单独文件
- table TD 超出省略号
- 2050: 技术未必会使我们摆脱愚昧,有时正相反(上)
- 我如何选PHP开发工具(PHP IDE)
- cas虚拟服务器,适用于CAS虚拟化平台的CloudOS3.0云主机镜像的制作
- unity android 30帧,解除某Unity游戏的30帧帧率限制
- java线性表实验心得_20162311 实验一 线性结构 实验报告
- 计算机桌面任务栏怎样显示输入法,计算机中任务栏的输入法无法切换怎么处理...
- 乔安智联未能找到使用指定服务器,智联物联路由器设置和指定服务器通信
- Android-高质量开发之崩溃优化,赶紧学起来
热门文章
- Blinder: Partition-Oblivious Hierarchical Scheduling论文笔记
- 《南朝凶猛》 轩辕鸿鸣
- 码农的自我修养之 软件危机和软件过程
- 使用椭球表示物体的语义SLAM
- 跨越财富鸿沟:技术写作带来的无限可能 —— 怎样通过技术写作实现财富自由?
- 跳槽如何谈薪资?不以升职加薪为目的的跳槽,都是耍流氓!
- 苹果ppt_最近苹果新机的3个动画霸屏了,PPT制作竟如此简单,手把手教你做出来!...
- 【安全系列】setoolkit钓鱼
- PyTorch导入报错:ValueError: module functions cannot set METH_CLASS or METH_STATIC
- php xampp linux,xampp linux 下载