/*********************************************** 公司:轮趣科技(东莞)有限公司 品牌:WHEELTEC 官网:wheeltec.net 淘宝店铺:shop114407458.taobao.com 速卖通: https://minibalance.aliexpress.com/store/4455017 版本:5.7 修改时间:2021-04-29 Brand: WHEELTEC Website: wheeltec.net Taobao shop: shop114407458.taobao.com Aliexpress: https://minibalance.aliexpress.com/store/4455017 Version:5.7 Update:2021-04-29 All rights reserved ***********************************************/ #ifndef __IOI2C_H #define __IOI2C_H #include "stm32f10x.h" /************************************************************************** 作者:平衡小车之家 我的淘宝小店:http://shop114407458.taobao.com/ **************************************************************************/ //IO口操作宏定义 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr) *((volatile unsigned long *)(addr)) #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射 #define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C #define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C #define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08 #define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008 #define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408 #define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808 #define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08 #define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08 #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //输出 #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //输入 #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //输出 #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //输入 #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //输出 #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //输入 //IO方向设置 #define SDA_IN() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=8<<4;} #define SDA_OUT() {GPIOB->CRH&=0XFFFFFF0F;GPIOB->CRH|=3<<4;} //IO操作函数 #define IIC_SCL PBout(8) //SCL #define IIC_SDA PBout(9) //SDA #define READ_SDA PBin(9) //输入SDA //IIC所有操作函数 void IIC_Init(void); // 初始化IIC的IO口 int IIC_Start(void); // 发送IIC开始信号 void IIC_Stop(void); // 发送IIC停止信号 void IIC_Send_Byte(u8 txd); //IIC发送一个字节 u8 IIC_Read_Byte(unsigned char ack); // IIC读取一个字节 int IIC_Wait_Ack(void); // IIC等待ACK信号 void IIC_Ack(void); //IIC发送ACK信号 void IIC_NAck(void); //IIC不发送ACK信号 void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data); u8 IIC_Read_One_Byte(u8 daddr,u8 addr); unsigned char I2C_Readkey(unsigned char I2C_Addr); unsigned char I2C_ReadOneByte(unsigned char I2C_Addr,unsigned char addr); unsigned char IICwriteByte(unsigned char dev, unsigned char reg, unsigned char data); u8 IICwriteBytes(u8 dev, u8 reg, u8 length, u8* data); u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data); u8 IICwriteBit(u8 dev,u8 reg,u8 bitNum,u8 data); u8 IICreadBytes(u8 dev, u8 reg, u8 length, u8 *data); int i2cWrite(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *data); int i2cRead(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf); #endif //------------------End of File----------------------------