I2C软件模拟主设备和从设备例程

IIC.h文件

#ifndef     __BSP_IIC_H__
#define     __BSP_IIC_H__
#include    "stm32f10x_conf.h"
#define     PIN_IIC_SCL             GPIO_Pin_6
#define     PIN_IIC_SDA             GPIO_Pin_7
#define     IIC_IOPORT              GPIOB

#define     IIC_SDA_L               GPIO_ResetBits(IIC_IOPORT, PIN_IIC_SDA)
#define     IIC_SDA_H               GPIO_SetBits(IIC_IOPORT, PIN_IIC_SDA)

#define     IIC_SCL_L               GPIO_ResetBits(IIC_IOPORT, PIN_IIC_SCL)
#define     IIC_SCL_H               GPIO_SetBits(IIC_IOPORT, PIN_IIC_SCL)

#define     IIC_OPR_READ                    1                   //读操作
#define     IIC_OPR_WRITE                   0                   //写操作

#define     IIC_STATE_IDLE              0                   //空闲状态
#define     IIC_STATE_STARTED           1                   //收到开始信号
#define     IIC_STATE_STOPED            2                   //收到停止信号
#define     IIC_STATE_SENT_ADDR     3                   //已经发送地址
#define     IIC_STATE_RECVING           4                   //收数据中
#define     IIC_STATE_SENDING           5                   //发数据中
#define     IIC_STATE_REV_NACK      6                   //收到NACK
#define     IIC_STATE_REV_ACK           7                   //收到ACK
#define     IIC_WAIT_ACK                    8                   //等待ACK
#define     IIC_READY_SEND_ACK      9                   //准备发送ACK
typedef struct
        {
            unsigned char IIC_SDA_State;
            unsigned char   IIC_SCL_State;
        }__IIC_SDASCL_STATE;
typedef struct
    {
        unsigned char       IIC_BUS_State;
        unsigned char       TranfDir;
        unsigned char       ShiftData;
        unsigned char       SlaveAddr;
        unsigned char       RData;

        unsigned char*  pWBuf;
        unsigned char*  pRBuf;
        int                         RecvBufSize;
        int                         RecvBytes;
        int                         WriteBytes;
        int                         RisingEdgeTimes;

        __IIC_SDASCL_STATE SDASCL_State[2];

    }__IIC_SLAVE_DEV_INFO;
void        IIC_Configeration(char isMaster,unsigned char SelfAddr );
void        IIC_Start(void);
void        IIC_Stop(void);
unsigned char       IIC_WaitACK(void);
void        IIC_AnswerACK(void);
void        IIC_NACK(void);
void        IIC_SendOneByte(unsigned char Data);

int     IIC_SendBytes(unsigned char SlaveAddr,unsigned char* Data,int Bytes);
unsigned char       IIC_ReadOneByte(void);
int     IIC_ReadBytes(unsigned char SlaveAddr,unsigned char* Data,int Bytes);

void        IIC_Delay(void);
void        IIC_SDA_Out(void);
void        IIC_SDA_In(void);
void        IIC_SCL_Out(
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值