STM32H750XB_RT-THREAD/I2C—AP3216C(光照三合一)/2.AP3216C基本数据读取_(模拟I2C)/User/i2c/bsp_i2c.h
2025-07-21 14:34:29 +08:00

54 lines
2.3 KiB
C

#ifndef __I2C_H
#define __I2C_H
#include "stm32h7xx.h"
/*设定的AP3216C IIC设备地址*/
#define AP3216C_ADDR 0x3C
#define I2CT_FLAG_TIMEOUT ((uint32_t)0x1000)
#define I2CT_LONG_TIMEOUT ((uint32_t)(10 * I2CT_FLAG_TIMEOUT))
/*I2C引脚*/
#define AP3216C_I2C_SCL_PIN GPIO_PIN_8
#define AP3216C_I2C_SCL_GPIO_PORT GPIOB
#define AP3216C_I2C_SCL_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE()
#define AP3216C_I2C_SDA_PIN GPIO_PIN_9
#define AP3216C_I2C_SDA_GPIO_PORT GPIOB
#define AP3216C_I2C_SDA_GPIO_CLK_ENABLE() __GPIOB_CLK_ENABLE()
//软件IIC使用的宏
#define I2C_SCL_1() HAL_GPIO_WritePin(AP3216C_I2C_SCL_GPIO_PORT, AP3216C_I2C_SCL_PIN,GPIO_PIN_SET) /* SCL = 1 */
#define I2C_SCL_0() HAL_GPIO_WritePin(AP3216C_I2C_SCL_GPIO_PORT, AP3216C_I2C_SCL_PIN,GPIO_PIN_RESET) /* SCL = 0 */
#define I2C_SDA_1() HAL_GPIO_WritePin(AP3216C_I2C_SDA_GPIO_PORT, AP3216C_I2C_SDA_PIN,GPIO_PIN_SET) /* SDA = 1 */
#define I2C_SDA_0() HAL_GPIO_WritePin(AP3216C_I2C_SDA_GPIO_PORT, AP3216C_I2C_SDA_PIN,GPIO_PIN_RESET) /* SDA = 0 */
#define I2C_SDA_READ() HAL_GPIO_ReadPin(AP3216C_I2C_SDA_GPIO_PORT, AP3216C_I2C_SDA_PIN) /* 读SDA口线状态 */
/*信息输出*/
#define I2C_DEBUG_ON 1
#define I2C_DEBUG_FUNC_ON 0
#define I2C_INFO(fmt,arg...) printf("<<-I2C-INFO->> "fmt"\n",##arg)
#define I2C_ERROR(fmt,arg...) printf("<<-I2C-ERROR->> "fmt"\n",##arg)
#define I2C_DEBUG(fmt,arg...) do{\
if(I2C_DEBUG_ON)\
printf("<<-I2C-DEBUG->> [%d]"fmt"\n",__LINE__, ##arg);\
}while(0)
#define I2C_DEBUG_FUNC() do{\
if(I2C_DEBUG_FUNC_ON)\
printf("<<-I2C-FUNC->> Func:%s@Line:%d\n",__func__,__LINE__);\
}while(0)
//函数接口
void I2C_Init(void);
uint32_t I2C_WriteBytes(uint8_t ClientAddr,uint8_t* pBuffer, uint8_t NumByteToWrite);
uint32_t I2C_ReadBytes(uint8_t ClientAddr,uint8_t* pBuffer, uint16_t NumByteToRead);
uint32_t Sensor_write(uint8_t reg_add,uint8_t reg_dat);
uint32_t Sensor_Read(uint8_t reg_add,unsigned char* Read,uint8_t num);
#endif /* __BSP_I2C */