首页 > 其他分享 >HC32L130/HC32L136开发之软件模拟IIC驱动AT24C64

HC32L130/HC32L136开发之软件模拟IIC驱动AT24C64

时间:2024-06-22 14:31:01浏览次数:3  
标签:AT24C64 SCL HC32L130 端口 HC32L136 GpioInitStruct SDA I2C define

一、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

相关文章

  • HC32L130读取SD3078时间
    一.SD3078电路图二.HC32L130IO模拟IIC 1.app_i2c_gpio.h/*****************************************************************************//**\fileapp_i2c_gpio.h****Headerfileforlcdfunctions******History:**-2024-06-21马天义微信:......
  • FPGA通过I2C控制AT24C64
    文章目录前言一、代码设计框图二、IIC_drive模块设计2.1、模块接口:2.2、代码功能描述:2.3、IIC协议实现过程:三、EEPROM_ctrl模块设计3.1、模块接口:3.2、代码功能描述四、EEPROM_drive模块五、iic_top模块前言继上一篇FPGA学习_I2C总线协议内容,本文将基于FPGA通过I2......
  • EEPROM M24C64替换AT24C64出现读取数据为0xff情况解决办法
    EEPROMM24C64替换AT24C64出现读取数据为0xff情况解决办法硬件情况STM32F103CBT6+模拟IIC,主频72MHz,IIC上拉电阻3.3kΩ 出现原因在IIC停止信号上,SCL、SDA翻转间隔不足以被M24C64识别,导致读写出错。修改前IIC停止代码如下:voidI2C_Stop(void){I2C_SCL_LOW();I......