STM32H750XB_RT-THREAD/I2C—AP3216C(光照三合一)/1.AP3216C基本数据读取_(硬件I2C)/User/ap3216c/ap3216c.c

101 lines
2.4 KiB
C
Raw Normal View History

2025-07-21 06:34:29 +00:00
/**
******************************************************************************
* @file ap3216.c
* @author fire
* @version V1.0
* @date 2019-xx-xx
* @brief AP3216C <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
******************************************************************************
* @attention
*
* ʵ<EFBFBD><EFBFBD>ƽ̨:Ұ<EFBFBD><EFBFBD> STM32 H743 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>̳ :http://www.firebbs.cn
* <EFBFBD>Ա<EFBFBD> :http://firestm32.taobao.com
*
******************************************************************************
*/
#include "./ap3216c/ap3216c.h"
#include "./usart/bsp_debug_usart.h"
#include "./delay/core_delay.h"
#include "./i2c/bsp_i2c.h"
#define AP3216C_ERROR I2C_ERROR
#define AP3216C_INFO I2C_INFO
/**
* @brief д<EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>AP3216C<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
* @param reg_add:<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* @param reg_data:Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
*/
void AP3216C_WriteReg(uint8_t reg_add,uint8_t reg_dat)
{
Sensors_I2C_WriteRegister(AP3216C_ADDRESS,reg_add,1,&reg_dat);
}
/**
* @brief <EFBFBD><EFBFBD>AP3216C<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param reg_add:<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* @param Read<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval
*/
void AP3216C_ReadData(uint8_t reg_add,unsigned char* Read,uint8_t num)
{
Sensors_I2C_ReadRegister(AP3216C_ADDRESS,reg_add,num,Read);
}
/**
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>AP3216CоƬ
* @param
* @retval
*/
void AP3216C_Init(void)
{
AP3216C_WriteReg(AP3216C_SYS_CONFIG, 0x00);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
AP3216C_WriteReg(AP3216C_SYS_CONFIG, AP3216C_SW_RST_BIT);//<2F><>λ
HAL_Delay(10);//<2F><>λ<EFBFBD><CEBB>һ<EFBFBD><D2BB>Ҫ<EFBFBD><D2AA>ʱ10ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
AP3216C_WriteReg(AP3216C_SYS_CONFIG, AP3216C_ALS_PS_IR_ACTIVE_BIT);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD>
}
/**
* @brief <EFBFBD><EFBFBD>ȡAP3216C<EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void AP3216CReadALS(uint16_t *alsData)
{
uint8_t buf[2];
AP3216C_ReadData(AP3216C_ALS_DATA_LOW, buf, 2);
*alsData = (buf[1] << 8) | buf[0];
}
/**
* @brief <EFBFBD><EFBFBD>ȡAP3216C<EFBFBD>Ľӽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void AP3216CReadPS(uint16_t *psData)
{
uint8_t buf[2];
AP3216C_ReadData(AP3216C_PS_DATA_LOW, buf, 2);
buf[0] = buf[0] & 0x0F; // PS Data LOW 4 bits
buf[1] = buf[1] & 0x3F; // PS Data HIGH 6 bits
*psData = (buf[1] << 4) | buf[0];
}
/**
* @brief <EFBFBD><EFBFBD>ȡAP3216C<EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param
* @retval
*/
void AP3216CReadIR(uint16_t *irData)
{
uint8_t buf[2];
AP3216C_ReadData(AP3216C_IR_DATA_LOW, buf, 2);
buf[0] = buf[0] & 0x03; // IR Data LOW 2 bits
*irData = (buf[1] << 2) | buf[0];
}