芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

飞芯科技-芯片解密|单片机解密|IC解密|芯片破解|芯片复制| PCB抄板|软件开发

STM32单片机模拟IIC通用驱动程序

单片机代码
//=====================MRI2C.h===========================
#ifndef __MRI2C_H
#define __MRI2C_H
#include "stm32f10x.h"

#include "wei_bit.h" //位带操作

#define W_SCL     PBout(8)   // 定义输出SCL引脚
#define W_SDA     PBout(9)   //定义输出SDA引脚
#define R_SDA     PBin(9)    //定义SDA输入用于读取状态

// 如果要启用高速 I2C,则定义 IIC_HS 注释掉下面一行降速
#define IIC_HS

// 条件编译的代码
#ifdef IIC_HS    //电平改变后无延时 最高速度 约300Khz
    #define W_SCL_H   W_SCL=1
    #define W_SCL_L   W_SCL=0
          #define W_SDA_H   W_SDA=1
    #define W_SDA_L   W_SDA=0                        
#else    //电平改变后延时达到减低速度目的 约100Khz
          #define W_SCL_H   W_SCL=1 ; IIc_Delay(10)     //SCL拉高 并延时
    #define W_SCL_L   W_SCL=0 ; IIc_Delay(10)     //SCL拉低 并延时
          #define W_SDA_H   W_SDA=1 ; IIc_Delay(5)      //SDA拉高 加延时
    #define W_SDA_L   W_SDA=0        ; IIc_Delay(5)      //SDA拉低 并延时
#endif

#define PCF8575_ADDRESS                0x40                //IIC的I2C从机地址
#define PCF8574_ADDRESS                0x4E                //IIC的I2C从机地址
#define PCF2129_ADDRESS           0xA2   //pcf2129
#define PCF8563_ADDRESS           0xA2   //pcf8563
#define R8025_ADDRESS             0x64   //R8025

extern  uint8_t   IIC_EEr ;       //错误标志

extern void I2C1_Init(void);                // IIC初始化
extern void I2C1_Reset(void);               //I2C故障重启

extern void I2C1_Read (uint8_t ADDRESS        , uint8_t addr,uint8_t *pData,uint8_t len);
extern void I2C1_Write(uint8_t ADDRESS        , uint8_t addr,uint8_t *pData,uint8_t len);

#endif
//====================MRI2C.c========================
//***************模拟IIC程序************************************
/*无延时,最高速度,时钟脉宽1.25us,间歇2.5us */
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "MRI2C.h"

#include "stm32f10x_i2c.h"


uint8_t   IIC_EEr = 0;          //错误标志。
uint16_t  EER_coner   = 0;     //错误计数器

//*********************************************************
void IIc_Delay(uint16_t ys)
{ uint16_t ystm;
            ystm=ys;
                                while(ystm--){}                        
}

//产生IIC起始信号
void MyI2C_Start(void)
{
W_SDA_H;
W_SCL_H;
W_SDA_L;
W_SCL_L;
}
//产生IIC停止信号
void MyI2C_Stop(void)
{
W_SDA_L;
W_SCL_H;
W_SDA_H;
        
}


联系方式

地址:石家庄市新华区民族路77号华强广场D座2009
电话:0311-88816616/87087811
手机:13315190088
传真:0311-67901001
联系人:张工
网址:www.feixindz.com
邮箱:feixindz@163.com
微信:xinpianjiemi
QQ:527263666/568069805

在线客服
热线电话

企业微信