controller-pcba/User/application/inc/TCA6416.h

60 lines
2.3 KiB
C

#ifndef __TCA6416_H
#define __TCA6416_H
#include "stm32f4xx_hal.h" // 只包含基本的 HAL 头文件
#include <stdint.h>
/* 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 */