一.SD3078电路图
二.HC32L130 IO模拟IIC
1.app_i2c_gpio.h
/*****************************************************************************/
/** \file app_i2c_gpio.h
**
** Headerfile for lcd functions
**
**
** History:
** - 2024-06-21 马天义 微信:terrymty 电话:17785153612 1.0 Version
**
*****************************************************************************/
#ifndef __APP_I2C_GPIO_H__
#define __APP_I2C_GPIO_H__
/*****************************************************************************
* Include files
*****************************************************************************/
#include "ddl.h"
#ifdef __cplusplus
extern "C"
{
#endif
#define I2C_WR 0 /* 写控制bit */
#define I2C_RD 1 /* 读控制bit */
void App_InitI2C(void);
void InitSDAInput(void);
void InitSDAOutput(void);
void InitSCLOutput(void);
void i2c_Start(void);
void i2c_Stop(void);
void i2c_SendByte(uint8_t _ucByte);
void i2c_writeByte(uint8_t _Address,uint8_t wdata, uint8_t usAddr);
uint8_t i2c_ReadByte(void);
uint8_t i2c_WaitAck(void);
void i2c_Ack(void);
void i2c_NAck(void);
uint8_t i2c_CheckDevice(uint8_t _Address);
uint8_t ee_CheckOk(void);
#ifdef __cplusplus
#endif
#endif /* __APP_I2C_GPIO_H__ */
/******************************************************************************
* EOF (not truncated)
*****************************************************************************/
2.app_i2c_gpio.c
#include "app_i2c_gpio.h"
#include "gpio.h"
/* 定义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口线状态 */
/*
*********************************************************************************************************
* 函 数 名: bsp_InitI2C
* 功能说明: 配置I2C总线的GPIO,采用模拟IO的方式实现
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
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; ///< 端口上下拉配置->无
GpioInitStruct.enPd = GpioPdDisable;
///< 端口开漏输出配置->开漏输出关闭
GpioInitStruct.enOD = GpioOdEnable;
///< 端口输入/输出值寄存器总线控制模式配置->AHB
GpioInitStruct.enCtrlMode = GpioAHB;
Gpio_Init(PORT_I2C_SDA, PIN_I2C_SDA, &GpioInitStruct);
Gpio_WriteOutputIO(PORT_I2C_SDA, PIN_I2C_SDA, TRUE
标签:SCL,读取,HC32L130,void,GpioInitStruct,SDA,SD3078,I2C,define
From: https://blog.csdn.net/mtyterry/article/details/139855122