101 lines
2.4 KiB
C
101 lines
2.4 KiB
C
/**
|
||
******************************************************************************
|
||
* @file ap3216.c
|
||
* @author fire
|
||
* @version V1.0
|
||
* @date 2019-xx-xx
|
||
* @brief AP3216C 驱动文件
|
||
******************************************************************************
|
||
* @attention
|
||
*
|
||
* 实验平台:野火 STM32 H743 开发板
|
||
* 论坛 :http://www.firebbs.cn
|
||
* 淘宝 :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 写数据到AP3216C寄存器
|
||
* @param reg_add:寄存器地址
|
||
* @param reg_data:要写入的数据
|
||
* @retval
|
||
*/
|
||
void AP3216C_WriteReg(uint8_t reg_add,uint8_t reg_dat)
|
||
{
|
||
Sensors_I2C_WriteRegister(AP3216C_ADDRESS,reg_add,1,®_dat);
|
||
}
|
||
|
||
/**
|
||
* @brief 从AP3216C寄存器读取数据
|
||
* @param reg_add:寄存器地址
|
||
* @param Read:存储数据的缓冲区
|
||
* @param num:要读取的数据量
|
||
* @retval
|
||
*/
|
||
void AP3216C_ReadData(uint8_t reg_add,unsigned char* Read,uint8_t num)
|
||
{
|
||
Sensors_I2C_ReadRegister(AP3216C_ADDRESS,reg_add,num,Read);
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief 初始化AP3216C芯片
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void AP3216C_Init(void)
|
||
{
|
||
AP3216C_WriteReg(AP3216C_SYS_CONFIG, 0x00);//关闭所有功能
|
||
AP3216C_WriteReg(AP3216C_SYS_CONFIG, AP3216C_SW_RST_BIT);//复位
|
||
HAL_Delay(10);//复位后一定要延时10ms,否则会出错
|
||
AP3216C_WriteReg(AP3216C_SYS_CONFIG, AP3216C_ALS_PS_IR_ACTIVE_BIT);//开启所有功能
|
||
}
|
||
|
||
/**
|
||
* @brief 读取AP3216C的环境光传感器数据
|
||
* @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 读取AP3216C的接近传感器数据
|
||
* @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 读取AP3216C的红外光传感器数据
|
||
* @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];
|
||
}
|