#ifndef __TCA6416_H #define __TCA6416_H #include "stm32f4xx_hal.h" // 只包含基本的 HAL 头文件 #include /* GPIO定义 */ #define TCA6416_SCL_PIN GPIO_PIN_2 #define TCA6416_SCL_PORT GPIOE #define TCA6416_SDA_PIN GPIO_PIN_3 #define TCA6416_SDA_PORT GPIOE #define TCA6416_SCL_PIN2 GPIO_PIN_5 #define TCA6416_SCL_PORT2 GPIOE #define TCA6416_SDA_PIN2 GPIO_PIN_4 #define TCA6416_SDA_PORT2 GPIOE /* TCA6416 I2C地址 */ #define TCA6416_ADDR 0x20 // 基础地址 (A0=A1=A2=GND) /* 寄存器地址定义 */ #define TCA6416_INPUT_PORT0 0x00 // 输入端口0 #define TCA6416_INPUT_PORT1 0x01 // 输入端口1 #define TCA6416_OUTPUT_PORT0 0x02 // 输出端口0 #define TCA6416_OUTPUT_PORT1 0x03 // 输出端口1 #define TCA6416_CONFIG_PORT0 0x06 // 配置端口0 #define TCA6416_CONFIG_PORT1 0x07 // 配置端口1 #define TCA6416_POL_INV_PORT0 0x04 // 极性反转端口0 #define TCA6416_POL_INV_PORT1 0x05 // 极性反转端口1 /* 软件I2C延时定义 */ #define I2C_DELAY() HAL_Delay(1) // 可以根据实际需要调整延时 /* 软件I2C基本操作函数 */ #define SCL_HIGH() HAL_GPIO_WritePin(TCA6416_SCL_PORT, TCA6416_SCL_PIN, GPIO_PIN_SET) #define SCL_LOW() HAL_GPIO_WritePin(TCA6416_SCL_PORT, TCA6416_SCL_PIN, GPIO_PIN_RESET) #define SDA_HIGH() HAL_GPIO_WritePin(TCA6416_SDA_PORT, TCA6416_SDA_PIN, GPIO_PIN_SET) #define SDA_LOW() HAL_GPIO_WritePin(TCA6416_SDA_PORT, TCA6416_SDA_PIN, GPIO_PIN_RESET) #define SDA_READ() HAL_GPIO_ReadPin(TCA6416_SDA_PORT, TCA6416_SDA_PIN) /* 函数声明 */ void TCA6416_GPIO_Init(void); uint8_t TCA6416_Init(void); uint8_t TCA6416_WritePort(uint8_t port, uint8_t data); uint8_t TCA6416_ReadPort(uint8_t port, uint8_t *data); uint8_t TCA6416_SetPortDirection(uint8_t port, uint8_t direction); uint8_t TCA6416_SetPortPolarity(uint8_t port, uint8_t polarity); uint8_t TCA6416_WritePin(uint8_t port, uint8_t pin, uint8_t state); uint8_t TCA6416_ReadPin(uint8_t port, uint8_t pin, uint8_t *state); /* 软件I2C底层函数 */ void I2C_Start(void); void I2C_Stop(void); void I2C_Ack(void); void I2C_NAck(void); uint8_t I2C_WaitAck(void); void I2C_SendByte(uint8_t byte); uint8_t I2C_ReadByte(void); #endif /* __TCA6416_H */