I2C.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #ifndef _I2C_H_
  2. #define _I2C_H_
  3. #include "../User/gd32f10x_it.h"
  4. #include <stdio.h>
  5. #define IIC_WP_PORT GPIOB
  6. #define IIC_WP_PIN GPIO_PIN_5 // 写使能
  7. #define IIC_SDA_PORT GPIOB
  8. #define IIC_SDA_PIN GPIO_PIN_7 // 数据线
  9. #define IIC_SCL_PORT GPIOB
  10. #define IIC_SCL_PIN GPIO_PIN_6 // 时钟线
  11. /*
  12. GPIO_CTL1(GPIOA) &= 0xfffff0ff; //设置RX引脚浮空输入 PA10
  13. GPIO_CTL1(GPIOA) |= (0x00000004<<(4*2));
  14. GPIO_CTL1(GPIOA) &= 0xffffff0f; //设置TX引脚复用推完输出 50M PA9
  15. GPIO_CTL1(GPIOA) |= (0x0000000B<<(4*1));
  16. GPIO_BOP(GPIOC) = GPIO_PIN_2; // 置高电平
  17. GPIO_BC(GPIOC) = GPIO_PIN_2; // 置低电平
  18. */
  19. #define SDA_IN() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)8<<(28));} //PB7 输入模式
  20. #define SDA_OUT() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)3<<(28));} //PB7 输出模式
  21. //#define SDA_IN() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x8);}//PB7 输入
  22. //#define SDA_OUT() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x3);}//PB7 输出
  23. //#define IIC_SCL(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_10:GPIO_BC(GPIOB) = GPIO_PIN_10) //SCL
  24. //#define IIC_SDA(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_11:GPIO_BC(GPIOB) = GPIO_PIN_11) //SDA
  25. #define IIC_SCL(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_6):gpio_bit_reset(GPIOB, GPIO_PIN_6))
  26. #define IIC_SDA(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_7):gpio_bit_reset(GPIOB, GPIO_PIN_7))
  27. #define READ_SDA (gpio_input_bit_get(GPIOB,GPIO_PIN_7)) // 输入SDA
  28. /* 写保护 低电平允许写入 高电平 禁止写入 */
  29. #define IIC_WRITE_PROTECT_ON() {GPIO_BOP(IIC_WP_PORT)=IIC_WP_PIN;} //
  30. #define IIC_WRITE_PROTECT_OFF() {GPIO_BC(IIC_WP_PORT)=IIC_WP_PIN;} //
  31. extern void delay_us(uint32_t nUs);
  32. extern void delay_ms(uint16_t nms);
  33. extern void i2c_init(void);
  34. extern void i2c_start(void);
  35. extern void i2c_stop(void);
  36. extern uint8_t i2c_wait_ack(void);
  37. extern void i2c_Ack(void);
  38. extern void i2c_NAck(void);
  39. extern void i2c_send_byte(uint8_t txd);
  40. extern uint8_t i2c_read_byte(uint8_t ack);
  41. #endif