stm32 i2c eeprom 24C02
电路图
相关文章: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的更多相关文章
- [51单片机] EEPROM 24c02 [I2C代码封装-保存实现流水灯]
这里把EEPROM 24c02封装起来,今后可以直接调用,其连线方式为:SDA-P2.1;SCL-P2.0;WP-VCC >_<:i2c.c /*--------------------- ...
- AM335x kernel 4.4.12 i2c eeprom AT24c02驱动移植
kernel 4.4.12 i2c eeprom AT24c02驱动移植 在kernel make menuconfig ARCH=ARM 中打开: Device Drivers ---> Mi ...
- STM32 I2C
STM32 I2C 搞了几天了,比较郁闷,写点东西给那些正在郁闷的同志 // 好使的,也是范例的代码 cnt = TIME_OUT; while (cnt-- && !I2C_Chec ...
- STM32 I2C 难点---这个不错,留着慢慢研究
来自:http://bbs.ednchina.com/BLOG_ARTICLE_2154168.HTM I2C 总线在所有嵌入式系统中用得极广, 是一个工业级别的总线, 但由于STM32 是一个32位 ...
- STM32 i2c通讯失败复位方法
最近在调研STM32 F10X,准备把公司AVR的MCU项目迁移到STM32上.在调研STM32 i2c这一部分时,在与i2c slave硬件连接断开后,这时再去读/写 i2c slave需要STM3 ...
- [51单片机] EEPROM 24c02 [读取存储多字节]
先将数据存进去,然后再读出来显示在数码管上. 除了代码里定义的连线外还要把p0连接到8位数码管的8针上. /*--------------------------------------------- ...
- [51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]
>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c #include &qu ...
- AT24 I2C EEPROM解析及测试
关键词:AT24.I2C.nvmem.EEPROM. 1. AT24C介绍 AT24C是一款采用I2C通信的EEPROM,相关驱动涉及到I2C和nvmem. I2C是读写数据的通道,nvmem将AT2 ...
- 解决STM32 I2C接口死锁在BUSY状态的方法讨论
关于STM32的I2C接口死锁在BUSY状态无法恢复的现象,网上已有很多讨论,看早几年比较老的贴子,有人提到复位MCU也无法恢复.只有断电才行的状况,那可是相当严重的问题.类似复位也无法恢复的情况是存 ...
随机推荐
- 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_03-新增课程-课程分类查询
2 新增课程 2.1 需求分析 用户操作流程如下: 1.用户进入“我的课程”页面,点击“新增课程”,进入新增课程页面 2.填写课程信息,选择课程分类.课程等级.学习模式等. 3.信息填写完毕,点击“提 ...
- C/C++程序所占用内存区域
C/C++编译的程序所占用内存区域一般分为以下5个部分: 栈区(stack):由编译器自动分配和释放,用来存放函数的参数.局部变量等.其操作方式类似于数据结构中的栈. 堆区(heap):一般由程序员分 ...
- Ubuntu 16.04 haproxy + keeplive
WEB架构
- 简介Python设计模式中的代理模式与模板方法模式编程
简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...
- Vue-cli安装,创建Vue项目
1.安装脚手架: npm install -g vue-cli 2.查看vue: vue 3.查看可以使用的模板: vue list 4.创建项目sell: vue init webpack sell ...
- iOS笔试题01
1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #import和#include都能完整地包 ...
- linux系统时间设定
更改系统时间并同步硬件时钟 sudo date -s '2018-12-27 12:46' sudo hwclock --systohc hwclock说明:hwclock --help
- docker 概念
前言: docker是一个开源的应用容器引擎,让开发这可以打包他们的应用以及依赖包到一个可以移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,互相之间不会有 ...
- Bilibili用户需求分析报告
一.产品简介 哔哩哔哩(英文名称:bilibili,简称B站)是国内知名的弹幕视频分享站,也是国内领先的年轻人文化社区 二.用户需求分析 (一)目标用户 根据百度指数,bilibili的主要用户遍布沿 ...
- HTML中,a href =" "和 a href ="#"的区别
a href ="" 刷新当前页面,回到页面顶部a href ="#"不会刷新页面,回到页面顶部.浏览器地址栏网址后面会多显示1个#.