电路图

相关文章: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. Java 5-11新特性的整理(转)

    Java 5-11新特性的整理(转) 作者:拔剑少年 简书地址:https://www.jianshu.com/u/dad4d9675892博客地址:https://it18monkey.github ...

  2. MERN——MongoDB && React && Node && Express

    原文链接:Let’s build a full stack MongoDB, React, Node and Express (MERN) app github源码地址:jelorivera08/re ...

  3. 算法习题---3.11换抵挡装置(UVa1588)

    一:题目 给你连个长度分别为n1,n2且每列高度只为1或2的长条,然后将他们拼在一起,高度不能超过3,问他们拼在一起的最短长度 二:实现思路 1.获取主动轮和从动轮的数据. 2.主动轮不动,从动轮从左 ...

  4. css简单学习属性3---css属性选择器

    1:通配符 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. 123457123457#0#-----com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym

    com.yuming.TruckCarRun01--前拼后广--大卡车游戏cym

  6. FastCGI模式下安装Xcache

    PHP执行的时候,会被编译成opcode,然后 zend引擎会执行opcode.也就是说,如果你两次执行同一个php程序,每次执行,他都要把php代码编译成opcodexcache的意义在于,当你第一 ...

  7. END使用

    [root@bogon ~]# cat d.sh #!/bin/bash#. /etc/init.d/functionscat <<END+------------------------ ...

  8. ELK之elasticsearch删除索引

    参考文档:https://www.cnblogs.com/Dev0ps/p/9493576.html elasticsearch使用时间久了会产生大量索引占用磁盘空间,可以删除索引来释放 查看当前所有 ...

  9. PHP反射API的使用、体会、说明

    最近开发支付宝相关功能的时候,由于支付宝的SDK比较落伍,不支持composer的方式加载,使用三方的composer SDK又觉得不放心 为了简化代码的调用方式,使用PHP的反射类针对支付宝官方SD ...

  10. springboot与shiro在html中使用shiro标签

    上一章讲环境搭建 springboot与shiro和mybatis和mysql 现在讲html中怎么使用shiro标签,这里是基于上一章讲的 在pom文件引入依赖 <dependency> ...