一、AT24C64电路图
二、程序编码
1.定义I2C总线连接的GPIO端口
/* 定义I2C总线连接的GPIO端口, 用户只需要修改下面4行代码即可任意改变SCL和SDA的引脚 */
#define RCC_I2C_PORT SysctrlPeripheralGpio /* GPIO端口时钟 */
#define PORT_I2C_SCL GpioPortA /* GPIO端口 */
#define PIN_I2C_SCL GpioPin8 /* GPIO引脚 */
#define PORT_I2C_SDA GpioPortB /* GPIO端口 */
#define PIN_I2C_SDA GpioPin15 /* GPIO引脚 */
#define I2C_SCL_PIN GpioPin8 /* 连接到SCL时钟线的GPIO */
#define I2C_SDA_PIN GpioPin15 /* 连接到SDA数据线的GPIO */
/* 定义读写SCL和SDA的宏 */
#define I2C_SCL_1() Gpio_WriteOutputIO(PORT_I2C_SCL, PIN_I2C_SCL, TRUE) /* SCL = 1 */
#define I2C_SCL_0() Gpio_WriteOutputIO(PORT_I2C_SCL, PIN_I2C_SCL, FALSE) /* SCL = 0 */
#define I2C_SDA_1() Gpio_WriteOutputIO(PORT_I2C_SDA, PIN_I2C_SDA, TRUE) /* SDA = 1 */
#define I2C_SDA_0() Gpio_WriteOutputIO(PORT_I2C_SDA, PIN_I2C_SDA, FALSE) /* SDA = 0 */
#define I2C_SDA_READ() (Gpio_GetInputIO(PORT_I2C_SDA,I2C_SDA_PIN) != 0) /* 读SDA口线状态 */
#define I2C_SCL_READ() (Gpio_GetInputIO(PORT_I2C_SCL,I2C_SCL_PIN) != 0) /* 读SCL口线状态 */
2.HC32L130的GPIO模拟I2C总线程序
/*
*********************************************************************************************************
* 函 数 名: bsp_InitI2C
* 功能说明: 配置I2C总线的GPIO,采用模拟IO的方式实现
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
#define I2C_WR 0 /* 写控制bit */
#define I2C_RD 1 /* 读控制bit */
void App_InitI2C(void)
{
InitSCLOutput();
InitSDAOutput();
/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
i2c_Stop();
}
void InitSDAInput(void)
{
stc_gpio_cfg_t GpioInitStruct;
DDL_ZERO_STRUCT(GpioInitStruct);
//使能GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输入
GpioInitStruct.enDir = GpioDirIn;
///< 端口驱动能力配置->高驱动能力
GpioInitStruct.enDrv = GpioDrvL;
///< 端口上下拉配置->无上下拉
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置->无
GpioInitStruct.enPd = GpioPdDisable;
///< 端口开漏输出配置->开漏输出关闭
// GpioInitStruct.enOD = GpioOdEnable;
///< 端口输入/输出值寄存器总线控制模式配置->AHB
GpioInitStruct.enCtrlMode = GpioAHB;
Gpio_Init(PORT_I2C_SDA,PIN_I2C_SDA,&GpioInitStruct); ///< 端口初始化
}
void InitSDAOutput(void)
{
stc_gpio_cfg_t GpioInitStruct;
DDL_ZERO_STRUCT(GpioInitStruct);
//使能GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输入
GpioInitStruct.enDir = GpioDirOut;
///< 端口驱动能力配置->高驱动能力
GpioInitStruct.enDrv = GpioDrvH;
///< 端口上下拉配置->无上下拉
GpioInitStruct.enPu = GpioPuDisable; ///< 端口上下拉配置-
标签:AT24C64,SCL,HC32L130,端口,HC32L136,GpioInitStruct,SDA,I2C,define
From: https://blog.csdn.net/mtyterry/article/details/139844399