如果使用了一个PA1来做I2C口的SDA,
需要为它定义端口、管脚、拉高、拉低、读取等一系列宏:
#define SDA_Port GPIOA
#define SDA_Pin GPIO_Pin_1
#define Clr_SDA() GPIO_ResetBits(SDA_Port, SDA_Pin)
#define Set_SDA() GPIO_SetBits(SDA_Port, SDA_Pin)
#define Get_SDA() GPIO_ReadBit(SDA_Port, SDA_Pin)
如果有几十个IO,上面就要复制粘贴很多行,劳动量大不说,还容易眼花出错……
为了省事并且不会出错,想用一个宏定义来产生上面5行:
#define DefGPIO(a,b,c) ……在这里填写宏
使用时只需在h里添加两行:
DefGPIO(SDA,A,1) //把PA1定义为SDA
DefGPIO(SCL,B,2) //把PB2定义为SCL
然后在c里就能直接使用一堆操作:
Clr_SDA();
Set_SDA();
Set_SCL();
Clr_SCL();
而且上电初始化端口时还会用到SDA_Port,SDA_Pin,SCL_Port,SCL_Pin这些常数去设置管脚属性 |