#ifndef _I2C_H_ #define _I2C_H_ #include "../User/gd32f10x_it.h" #include #define IIC_WP_PORT GPIOD #define IIC_WP_PIN GPIO_PIN_8 // 写使能 #define IIC_SDA_PORT GPIOB #define IIC_SDA_PIN GPIO_PIN_11 // 数据线 #define IIC_SCL_PORT GPIOB #define IIC_SCL_PIN GPIO_PIN_10 // 时钟线 /* GPIO_CTL1(GPIOA) &= 0xfffff0ff; //设置RX引脚浮空输入 PA10 GPIO_CTL1(GPIOA) |= (0x00000004<<(4*2)); GPIO_CTL1(GPIOA) &= 0xffffff0f; //设置TX引脚复用推完输出 50M PA9 GPIO_CTL1(GPIOA) |= (0x0000000B<<(4*1)); GPIO_BOP(GPIOC) = GPIO_PIN_2; // 置高电平 GPIO_BC(GPIOC) = GPIO_PIN_2; // 置低电平 */ #define SDA_IN() {GPIO_CTL1(GPIOB) &= 0xFFFF0FFF;GPIO_CTL1(GPIOB) |= ((uint32_t)8<<(12));} //PB11 输入模式 #define SDA_OUT() {GPIO_CTL1(GPIOB) &= 0xFFFF0FFF;GPIO_CTL1(GPIOB) |= ((uint32_t)3<<(12));} //PB11 输出模式 //#define SDA_IN() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x8);}//PB7 输入 //#define SDA_OUT() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x3);}//PB7 输出 //#define IIC_SCL(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_10:GPIO_BC(GPIOB) = GPIO_PIN_10) //SCL //#define IIC_SDA(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_11:GPIO_BC(GPIOB) = GPIO_PIN_11) //SDA #define IIC_SCL(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_10):gpio_bit_reset(GPIOB, GPIO_PIN_10)) #define IIC_SDA(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_11):gpio_bit_reset(GPIOB, GPIO_PIN_11)) #define READ_SDA (gpio_input_bit_get(GPIOB,GPIO_PIN_11)) // 输入SDA /* 写保护 低电平允许写入 高电平 禁止写入 */ #define IIC_WRITE_PROTECT_ON() {GPIO_BOP(IIC_WP_PORT)=IIC_WP_PIN;} // #define IIC_WRITE_PROTECT_OFF() {GPIO_BC(IIC_WP_PORT)=IIC_WP_PIN;} // extern void delay_us(uint32_t nUs); extern void delay_ms(uint16_t nms); extern void i2c_init(void); extern void i2c_start(void); extern void i2c_stop(void); extern uint8_t i2c_wait_ack(void); extern void i2c_Ack(void); extern void i2c_NAck(void); extern void i2c_send_byte(uint8_t txd); extern uint8_t i2c_read_byte(uint8_t ack); #endif