电路图

相关文章:http://blog.csdn.net/zhangxuechao_/article/details/74936798

举例

#define i2c_scl PBout(10)
#define i2c_sda PBout(11)
#define i2c_ack PBin(11) void I2C_init()
{
GPIO_InitTypeDef gpio10 =
{
GPIO_Pin_10,
GPIO_Speed_50MHz,
GPIO_Mode_Out_PP
}; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //时钟使能 GPIO_Init(GPIOB, &gpio10);
} void I2C_in()
{
GPIO_InitTypeDef gpio11 =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_IPD
}; GPIO_Init(GPIOB, &gpio11);
} void I2C_out()
{
GPIO_InitTypeDef gpio11 =
{
GPIO_Pin_11,
GPIO_Speed_50MHz,
GPIO_Mode_Out_PP
}; GPIO_Init(GPIOB, &gpio11);
} void I2C_start()
{
I2C_out(); i2c_sda = 1;
i2c_scl = 1;
delay_us(5);
i2c_sda = 0;
delay_us(5); i2c_scl = 0;
} void I2C_stop()
{
I2C_out(); i2c_sda = 0;
i2c_scl = 1;
delay_us(5);
i2c_sda = 1;
delay_us(5); i2c_scl = 0;
} void I2C_ack(u8 ack)
{
i2c_scl = 0; //必须的 I2C_out(); i2c_sda = ack;
delay_us(2);
i2c_scl = 1;
delay_us(5); i2c_scl = 0;
} u8 I2C_wait_ack()
{
u8 flag = 0; I2C_in(); i2c_scl = 1;
delay_us(2); while(i2c_ack == 1)
{
flag++;
if(flag > 250)
{
return 1;
}
}
i2c_scl = 0; return 0;
} void I2C_send_byte(u8 data)
{
u8 i = 0; I2C_out(); i2c_scl = 0; for(i = 0; i < 8; i++)
{
if((data & 0x80) > 0)
i2c_sda = 1;
else
i2c_sda = 0;
data <<= 1;
delay_us(2); i2c_scl = 1;
delay_us(2);
i2c_scl = 0;
delay_us(2);
}
} u8 I2C_recv_byte()
{
u8 i = 0;
u8 data; I2C_in(); for(i = 0; i < 8; i++)
{
i2c_scl = 0;
delay_us(2);
i2c_scl = 1;
delay_us(2);
data <<= 1;
data |= i2c_ack;
delay_us(2);
} I2C_ack(0); return data;
} void at24c02Write(u8 addr, u8 d)
{
I2C_start();
I2C_send_byte(0xa0);
I2C_wait_ack();
I2C_send_byte(addr);
I2C_wait_ack();
I2C_send_byte(d);
I2C_wait_ack();
I2C_stop(); delay_ms(10);
} u8 at24c02Read(u8 addr)
{
u8 d = 0; I2C_start();
I2C_send_byte(0xa0);
I2C_wait_ack();
I2C_send_byte(addr);
I2C_wait_ack();
I2C_start();
I2C_send_byte(0xa1);
I2C_wait_ack();
d = I2C_recv_byte();
I2C_stop(); return d;
} void at24c02Read_buf(u8 *buf, u8 addr, u16 num)
{
u8 i = 0; for(i = 0; i < num; i++)
{
buf[i] = at24c02Read(addr + i);
}
} void at24c02Write_buf(u8 *buf, u8 addr, u16 num)
{
u8 i = 0; for(i = 0; i < num; i++)
{
at24c02Write(addr + i, buf[i]);
}
}

stm32 i2c eeprom 24C02的更多相关文章

  1. [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]

    这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...

  2. AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植

    kernel 4.4.12 i2c eeprom AT24c02驱动移植 在kernel make menuconfig ARCH=ARM 中打开: Device Drivers ---> Mi ...

  3. STM32 I2C

    STM32 I2C 搞了几天了,比较郁闷,写点东西给那些正在郁闷的同志 // 好使的,也是范例的代码 cnt = TIME_OUT; while (cnt-- && !I2C_Chec ...

  4. STM32 I2C 难点---这个不错,留着慢慢研究

    来自:http://bbs.ednchina.com/BLOG_ARTICLE_2154168.HTM I2C 总线在所有嵌入式系统中用得极广, 是一个工业级别的总线, 但由于STM32 是一个32位 ...

  5. STM32 i2c通讯失败复位方法

    最近在调研STM32 F10X,准备把公司AVR的MCU项目迁移到STM32上.在调研STM32 i2c这一部分时,在与i2c slave硬件连接断开后,这时再去读/写 i2c slave需要STM3 ...

  6. [51单片机] EEPROM 24c02 [读取存储多字节]

    先将数据存进去,然后再读出来显示在数码管上. 除了代码里定义的连线外还要把p0连接到8位数码管的8针上. /*--------------------------------------------- ...

  7. [51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]

    >_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c #include &qu ...

  8. AT24 I2C EEPROM解析及测试

    关键词:AT24.I2C.nvmem.EEPROM. 1. AT24C介绍 AT24C是一款采用I2C通信的EEPROM,相关驱动涉及到I2C和nvmem. I2C是读写数据的通道,nvmem将AT2 ...

  9. 解决STM32 I2C接口死锁在BUSY状态的方法讨论

    关于STM32的I2C接口死锁在BUSY状态无法恢复的现象,网上已有很多讨论,看早几年比较老的贴子,有人提到复位MCU也无法恢复.只有断电才行的状况,那可是相当严重的问题.类似复位也无法恢复的情况是存 ...

随机推荐

  1. QML发布程序

    如果是在windows系统下,则最终打包成exe windeployqt  xxx.exe  -qmldir  C:\Qt\Qt5.9.6\5.9.6\mingw53_32\qml 注意使用Qt自己的 ...

  2. 一个小时学会Git(转载)

    ---恢复内容开始--- 一个小时学会Git     最近要与部门同事一起做技术分享,我选择了Git,因为Git 是一种在全球范围都广受欢迎的版本控制系统.在开发过程中,为了跟踪代码,文档,项目等信息 ...

  3. (六)Centos之目录作用介绍

    我们先切换到系统根目录 / 看看根目录下有哪些目录 这里首先看下 根目录/ 下的 bin 和 sbin: 在user下也有bin和sbin 根目录下的bin和sbin,usr目录下的bin和sbin, ...

  4. JAVA数据结构和算法 1-综述:数据结构和数据类型

    数据结构:指数据在计算机内存空间中或者磁盘中的组织形式. 对于数据结构的操作:插入.删除.查找.迭代遍历.排序等: Java.util包中含有诸如向量(一个可扩充的数组).栈.哈希表等类型的数据结构, ...

  5. 微服务之Polly熔断策略

    NET Core 微服务之Polly熔断策略 紧接着上一篇说,咱们继续介绍Polly这个类库 熔断策略(Circuit-breaker) 如果调用某个目标服务出现过多超时.异常等情况,可以采取一定时间 ...

  6. PLSQL设置文件夹排序并设置颜色

  7. hdu 1209 Clock

    Clock Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  8. 读取json数据封装

    前言:做自动化常用公共方法 import json class ReadJson(): def __init__(self): self.data = self.read_data() #读取JSON ...

  9. super的实例及实现原理

    super实例 class A(): def go(self): print ("go A go!") def stop(self): print ("stop A st ...

  10. EventBus使用的坑

    最近使用eventbus发送通知,在想该怎么携带List集合数据.于是尝试直接发送List. 使用一次,正常接收.使用两次,出现类转换异常.原来在接收List类型的消息时,并不会管List内的泛型,是 ...