STM32F103 使用 AS7341 光谱检测传感器的驱动程序

您所在的位置:网站首页 红外光谱仪初始化失败原因分析 STM32F103 使用 AS7341 光谱检测传感器的驱动程序

STM32F103 使用 AS7341 光谱检测传感器的驱动程序

2024-07-12 03:28| 来源: 网络整理| 查看: 265

STM32F103 使用 AS7341 光谱检测传感器的驱动程序

因为项目需要,使用到AS7341传感器并且通过STM32进行处理与发送,而搜索了很久,并没有找到使用STM32对于该传感器的驱动程序,只有Arduino的相关例程。 又因为本人没有学过Arduino,对于Arduino所使用的C++也并不熟悉,只能参考其他文章与代码来做出修改。 (参考的文章:STM32F429 使用 TCS34725 颜色传感器的驱动程序、AS7341 Visible Light Sensor )

1、Arduino代码的记录

器件地址如下: 器件地址 寄存器地址如下: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 以下是Arduino代码中的寄存器地址配置,可以直接用

#define REG_AS7341_ASTATUS 0X60 /* #define REG_AS7341_CH0_DATA_L 0X61//文档中说可以从0x60或者0x94开始查询,该地方使用第二种 #define REG_AS7341_CH0_DATA_H 0X62 #define REG_AS7341_ITIME_L 0X63 #define REG_AS7341_ITIME_M 0X64 #define REG_AS7341_ITIME_H 0X65 #define REG_AS7341_CH1_DATA_L 0X66 #define REG_AS7341_CH1_DATA_H 0X67 #define REG_AS7341_CH2_DATA_L 0X68 #define REG_AS7341_CH2_DATA_H 0X69 #define REG_AS7341_CH3_DATA_L 0X6A #define REG_AS7341_CH3_DATA_H 0X6B #define REG_AS7341_CH4_DATA_L 0X6C #define REG_AS7341_CH4_DATA_H 0X6D #define REG_AS7341_CH5_DATA_L 0X6E #define REG_AS7341_CH5_DATA_H 0X6F */ #define REG_AS7341_CONFIG 0X70 #define REG_AS7341_STAT 0X71 #define REG_AS7341_EDGE 0X72 #define REG_AS7341_CPIO 0X73 #define REG_AS7341_LED 0X74 #define REG_AS7341_ENABLE 0X80 #define REG_AS7341_ATIME 0X81 #define REG_AS7341_WTIME 0X83 #define REG_AS7341_SP_TH_L_LSB 0X84 #define REG_AS7341_SP_TH_L_MSB 0X85 #define REG_AS7341_SP_TH_H_LSB 0X86 #define REG_AS7341_SP_TH_H_MSB 0X87 #define REG_AS7341_AUXID 0X90 #define REG_AS7341_REVID 0X91 #define REG_AS7341_ID 0X92 #define REG_AS7341_STATUS_1 0X93 #define REG_AS7341_ASTATUS 0X94 #define REG_AS7341_CH0_DATA_L 0X95 #define REG_AS7341_CH0_DATA_H 0X96 #define REG_AS7341_CH1_DATA_L 0X97 #define REG_AS7341_CH1_DATA_H 0X98 #define REG_AS7341_CH2_DATA_L 0X99 #define REG_AS7341_CH2_DATA_H 0X9A #define REG_AS7341_CH3_DATA_L 0X9B #define REG_AS7341_CH3_DATA_H 0X9C #define REG_AS7341_CH4_DATA_L 0X9D #define REG_AS7341_CH4_DATA_H 0X9E #define REG_AS7341_CH5_DATA_L 0X9F #define REG_AS7341_CH5_DATA_H 0XA0 #define REG_AS7341_STATUS_2 0XA3 #define REG_AS7341_STATUS_3 0XA4 #define REG_AS7341_STATUS_5 0XA6 #define REG_AS7341_STATUS_6 0XA7 #define REG_AS7341_CFG_0 0XA9 #define REG_AS7341_CFG_1 0XAA #define REG_AS7341_CFG_3 0XAC #define REG_AS7341_CFG_6 0XAF #define REG_AS7341_CFG_8 0XB1 #define REG_AS7341_CFG_9 0XB2 #define REG_AS7341_CFG_10 0XB3 #define REG_AS7341_CFG_12 0XB5 #define REG_AS7341_PERS 0XBD #define REG_AS7341_GPIO_2 0XBE #define REG_AS7341_ASTEP_L 0XCA #define REG_AS7341_ASTEP_H 0XCB #define REG_AS7341_AGC_GAIN_MAX 0XCF #define REG_AS7341_AZ_CONFIG 0XD6 #define REG_AS7341_FD_TIME_1 0XD8 #define REG_AS7341_TIME_2 0XDA #define REG_AS7341_CFG0 0XD7 #define REG_AS7341_STATUS 0XDB #define REG_AS7341_INTENAB 0XF9 #define REG_AS7341_CONTROL 0XFA #define REG_AS7341_FIFO_MAP 0XFC #define REG_AS7341_FIFO_LVL 0XFD #define REG_AS7341_FDATA_L 0XFE #define REG_AS7341_FDATA_H 0XFF

这篇文章的有较介绍 (AS7341 Visible Light Sensor) 可知,AS7341的主要功能有两种:1、频谱检测 2、闪烁频率检测 。 由于我需要的功能是频谱检测,使用默认的spm模式,因而不需要进行ADC增益与转换时间的设置。以下是我用到的代码。 以下是Arduino源码:

int DFRobot_AS7341::begin(eMode_t mode) //初始化部分 { uint8_t buffer[2]; _pWire->begin(); _pWire->beginTransmission(_address); if(_pWire->endTransmission() != 0){ DBG(""); DBG("bus data access error"); DBG(""); return ERR_DATA_BUS; } enableAS7341(true); measureMode = mode; return ERR_OK; } uint8_t DFRobot_AS7341::readID()//读id,用于判断是否是正确 { uint8_t id; if(readReg(REG_AS7341_ID,&id,1) == 0){ DBG(


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3