近日,在进行GD32f103读写DS3231是发现,使用单片机的PC0,PC1模拟I2C,读出的数据总是FF,之前一直使用的是PC13,PC14,因为位置和布线的原因才更换到PC0,PC1端口。所以从宏定义到端口初始化一路修改下来,发现读数就是不对。于是就看手册,查资料,并未发现PC0,PC1这两个端口有什么特殊设置,也不是特殊端口,使用示波器查看数据波形,虽然看不出数据到底是啥,但还是有波形的。使用延时使端口定时反转,也正常。一度怀疑是DS3231坏了,更换后故障依然。没办法只好飞线用回运来的PC13,PC14管脚,一切正常!不知何故,如有和我一样的,咱们一起探讨一下,或者哪位大侠知道适合原因导致的,小弟跪求!
#define DS3231_SDA_GPIO_PORT GPIOC /* GPIOC端口 */
#define DS3231_SDA_GPIO_PIN GPIO_PIN_15 /* 连接到DS3231的SDA脚的GPIO */
#define DS3231_SDA_Mode_Out_OD GPIO_MODE_OUTPUT_PP /* 通用开漏输出*/
#define DS3231_SDA_Mode_IN_FLOATING GPIO_MODE_AF_INPUT /* 浮空输入模式*/
#define DS3231_SCL_GPIO_PORT GPIOC /* GPIOC端口 */
#define DS3231_SCL_GPIO_PIN GPIO_PIN_14 /* 连接到DS3231的SDA脚的GPIO */
#define DS3231_SCL_Mode_Out_OD GPIO_MODE_OUTPUT_OD /* 通用开漏输出*/
#define DS3231_SCL_Mode_IN_FLOATING GPIO_MODE_AF_INPUT /* 浮空输入模式*/
#define DS3231_SCL_GPIO_PORT GPIOC /* GPIOC端口 */
#define DS3231_RST_GPIO_PIN GPIO_PIN_13 /* 连接到DS3231的SDA脚的GPIO */
#define IIC_SDA_H HAL_GPIO_WritePin(DS3231_SDA_GPIO_PORT, DS3231_SDA_GPIO_PIN,GPIO_PIN_SET) //SDA置高
#define IIC_SDA_L HAL_GPIO_WritePin(DS3231_SDA_GPIO_PORT, DS3231_SDA_GPIO_PIN,GPIO_PIN_RESET) //SDA置低
#define IIC_SCL_H HAL_GPIO_WritePin(DS3231_SCL_GPIO_PORT, DS3231_SCL_GPIO_PIN,GPIO_PIN_SET) //SCL置高
#define IIC_SCL_L HAL_GPIO_WritePin(DS3231_SCL_GPIO_PORT, DS3231_SCL_GPIO_PIN,GPIO_PIN_RESET) //SCL置低
#define IIC_RST_H HAL_GPIO_WritePin(DS3231_RST_GPIO_PORT, DS3231_SCL_GPIO_PIN,GPIO_PIN_SET) //RST置高
#define IIC_RST_L HAL_GPIO_WritePin(DS3231_RST_GPIO_PORT, DS3231_SCL_GPIO_PIN,GPIO_PIN_RESET) //RST置低
这是可以使用的端口宏定义和设置。
将端口改为PC0,PC1后则不正常!