【学习记录】软件iic

由于有时候出现硬件iic总线挂死的情况,所以记录一下软件iic的方法,代码来源网上资料整合
以下是.h文件

#ifndef _M_IIC_SOFT_H
#define _M_IIC_SOFT_H
#include "stdint.h" //基本数据结构
// #include "M_io.h"
#include "gd32f30x.h" //io 控制
/*******************************************
 *Soft I2C 

 ********************************************/
 
    /* connect PB6 to I2C_SCL */
    /* connect PB7 to I2C_SDA */

#define IIC_Soft   1    //是否启用软件

#define WP_EE_GPIO_PORT    GPIOB
#define WP_EE_PIN          GPIO_PIN_5
//#define IIC_SCL   I2C0_SCL_PIN
//#define IIC_SDA   I2C0_SDA_PIN

#define SDA_IN()    gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_7)//输入模式
#define SDA_OUT()   gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7)//输出模式

#define SCL_OUT()   gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6)//输出模式

#define I2C_WAIT_TIMEOUT     	(uint8_t)250	//等待时间
#define I2C_DELAY             	(uint8_t)5		//延时时间

#define I2C_N_ACK               (0U)   //不发ACK
#define I2C_ACK 				        (1U)   //发送ACK

#define SW_I2C_SCL_LOW             gpio_bit_reset(GPIOB, GPIO_PIN_6);
#define SW_I2C_SCL_HIGH            gpio_bit_set(GPIOB, GPIO_PIN_6);
#define SW_I2C_SDA_LOW             gpio_bit_reset(GPIOB, GPIO_PIN_7);
#define SW_I2C_SDA_HIGH            gpio_bit_set(GPIOB, GPIO_PIN_7);

#define I2C_SDA_STATUS          	 gpio_input_bit_get (GPIOB,GPIO_PIN_7)                      //读取SDA状态
#define I2C_SCL_STATUS             gpio_input_bit_get (GPIOB,GPIO_PIN_6)                      	//读取SCL状态

//#define SW_I2C_SDA_INPUT        sw_i2c_set_sda_input()		//设置SDA为输入模式
//#define SW_I2C_SDA_OUTPUT       sw_i2c_set_sda_output()		//设置SDA为输出模式
//#define SW_I2C_SDA_STATUS       sw_i2c_sda_status()			//设置SDA状态
//#define SW_I2C_BusInit          sw_i2c_busInit()			//总线初始化
  
//#define i2c_delay_us(a)         SysCtlDelayus(a)			//延时函数us
void Init_IIC(void);

void i2c_delay(void);


extern void sw_i2c_start(void);
extern void sw_i2c_stop(void);
extern
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值