//******************************************************************** // Ver 1.0 // 2021.11.19 1、新建文件 //******************************************************************** #ifndef __I2CS1__H #define __I2CS1__H //*********************************************************************************** //IIC 引脚初始化 #define I2CS_GpioInit() do{ \ I2CS_Sda0Init(); \ I2CS_Scl0Init(); \ I2CS_Sda1Init(); \ I2CS_Scl1Init(); \ I2CS_Pull1Init(); \ }while(0) //IIC SDA引脚控制,P00->PB9 #define I2CS_Sda0Init() GPIO_Init(GPIOB, GPIO_Pin_9, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_OD, GPIO_PuPd_NOPULL) #define I2CS_Sda0Write(Value) GPIO_WritePin(GPIOB, GPIO_Pin_9, Value) #define I2CS_Sda0Read() GPIO_ReadPin(GPIOB, GPIO_Pin_9) //IIC SCL引脚控制,P01->PB8 #define I2CS_Scl0Init() GPIO_Init(GPIOB, GPIO_Pin_8, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_OD, GPIO_PuPd_NOPULL) #define I2CS_Scl0Write(Value) GPIO_WritePin(GPIOB, GPIO_Pin_8, Value) #define I2CS_Scl0Read() GPIO_ReadPin(GPIOB, GPIO_Pin_8) //IIC SDA引脚控制,P17->PB14 #define I2CS_Sda1Init() GPIO_Init(GPIOB, GPIO_Pin_14, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_OD, GPIO_PuPd_NOPULL) #define I2CS_Sda1Write(Value) GPIO_WritePin(GPIOB, GPIO_Pin_14, Value) #define I2CS_Sda1Read() GPIO_ReadPin(GPIOB, GPIO_Pin_14) //IIC SCL引脚控制,P51->PB13 #define I2CS_Scl1Init() GPIO_Init(GPIOB, GPIO_Pin_13, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_OD, GPIO_PuPd_NOPULL) #define I2CS_Scl1Write(Value) GPIO_WritePin(GPIOB, GPIO_Pin_13, Value) #define I2CS_Scl1Read() GPIO_ReadPin(GPIOB, GPIO_Pin_13) //IIC PULL UP引脚控制,P22->PB5 #define I2CS_Pull1Init() GPIO_Init(GPIOB, GPIO_Pin_5, 1, GPIO_Mode_OUT, GPIO_Speed_2MHz, GPIO_OType_PP, GPIO_PuPd_NOPULL) #define I2CS_Pull1Up(NewState) GPIO_WritePin(GPIOB, GPIO_Pin_5, NewState) //*********************************************************************************** enum{ I2CS0 = 0, I2CS1, I2CS_MAX, I2CS_SCL = 0, I2CS_SDA = 1, }; typedef struct{ INT16U Baud; INT16U ErrCnt; INT8U SendCnt; INT8U Ack; }I2C_Str1; typedef struct{ I2C_Str1 Info[I2CS_MAX]; }I2C_Str; extern I2C_Str I2CS_Info; #define I2CS_InfoInit(I2Cx) MEM_Fill((INT8U *)&I2CS_Info.Info[I2Cx], 0, sizeof(I2C_Str1)) #define I2CS_Init(I2Cx, Baud) do{ \ I2CS_InfoInit(I2Cx); \ I2CS_GpioInit(); \ }while(0) //*********************************************************************************** #if 1 //100K #define I2CS_BytesDelay() DELAY_Us(10) #define I2CS_BitsDelay() DELAY_Us(1) #else //10K #define I2CS_BytesDelay() DELAY_Us(50) #define I2CS_BitsDelay() DELAY_Us(5) #endif #define I2C_SCL_LOW_MAX 100 //*********************************************************************************** extern INT8U I2CS_ReadMultiByte(INT8U I2Cx,INT8U Addr,INT16U Reg,INT8U *ptr,INT8U Len); extern INT8U I2CS_WriteMultiByte(INT8U I2Cx,INT8U Addr,INT16U Reg,INT8U *ptr,INT8U Len); #endif