stm32F4之使用I2C读写24C02

2020-07-03来源: eefocus关键字:stm32F4  I2C  读写24C02

一.24C02简单介绍


1.串行E2PROM是基于I2C-BUS 的存储器件,


2.可以支持100万次擦除,数据可以保存100年,


3.支持每次读写1字节


4.写周期最大5ms(即最好保证在5ms后进行读写,否则可以数据将会读取错误)


二.24C02的读写时序图


从手册中可以找到以下两个读写图,我也将以以下两个图为例进行函数编写,其他读写图请查手册


 

三.用模拟的I2C协议封装24C02的读与写

该设备为IIC设备,因此我们要先确定其设备地址,STM32F4探索者的开发板上为2K的E2PROM,A2=A1=A0  因此设备地址为(0XA0/0xA1)

根据下图进行编程:


字节写:

使用封装好的I2C函数,进行函数24C02的写函数封装:


函数编写流程为 :start->发送设备地址->等待ACK->发送需要被写的内存地址->等待ACK->发送数据写入E2PROM->等待ACK->STOP


void sendOneByte(u8 Adddrsend, u8 Datasend)

{

IIC_start();

IIC_Send_Byte(0xA0);

IIC_Wait_Ack();

IIC_Send_Byte(Adddrsend);

IIC_Wait_Ack();

IIC_Send_Byte(Datasend);

IIC_Wait_Ack();

IIC_stop();

delay_ms(10);

}


字节读:

读函数编写流程:start->发送设备地址->等待ACK->发送需要被读的内存地址->等待ACK->发送读指令(设备地址)->等待ACK-->读内存数据->等待no ACK->STOP 


u8 receiceOneByte(u8 Adddreceive)

{

u8 receive=0;

IIC_start();

IIC_Send_Byte(0xA0);

IIC_Wait_Ack();

IIC_Send_Byte(Adddreceive);

IIC_Wait_Ack();

IIC_start();

IIC_Send_Byte(0xA1);

IIC_Wait_Ack();

receive=IIC_Read_Byte(0);

IIC_stop();

return receive;

}


最后就可以对24C02进行简单的读写,可以配合我另一篇文章看,更为清晰。


关键字:stm32F4  I2C  读写24C02 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic502063.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32F4硬件IIC+DMA使用
下一篇:串口通讯(DMA模式)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

stm32F4+lcd1602实现采集两路adc并显示
以STM32F403为控制核心,设计一种基于STM32的智能照明控制系统,使用光敏电阻作为光照信息来源,使用GP2D12作为人物信息来源,当光照强度改变时,光敏电阻的阻值改变,从而改变STM32的采样电压。当人物移动时,红外传感器的电压改变从而改变采样电压。当光照强度小于一定值,且感应到有人时,LED亮。通过光敏电阻和GP2D12传感器获取光照和红外信息,作为模拟量,传入STM32F4的采集端口。STM32F4进行模数转换后,在LCD1602上进行显示。采用了HAL库进行配置STM32F4,一直有个问题就是proteus仿真DS18B20和DHT11这种带有时序要求的传感器,同STM32通信时出现时序错误,有经验的师兄可以告知一下
发表于 2020-07-22
<font color='red'>stm32F4</font>+lcd1602实现采集两路adc并显示
STM32F4硬件IIC+DMA使用
1.STM32硬件IIC一直被大家说存在问题,实际测试发现确实是有这种情况,借助网上很多人的经验,终于把硬件IIC写完了。2.使用DMA时,发现发送数据(写寄存器)时序和实际不符,比如发送4字节数据时,如果DMA缓冲区单字节长度配置为4,则实际时序发现只有三个,需要将DMA缓冲区单字节长度配置为5,才可以正常使用3.当然,如果使用STM32的HAL库,这些问题其实都可以避免,因为底层ST已经做了超时及错误的处理。4.使用的IIC为自定义的格式,写寄存器操作为:START+ACK(从机的ACK信号)+IIC设备地址+(从机的ACK信号)+START+ACK(从机的ACK信号)+IIC写寄存器地址+ACK(从机的ACK信号)+IIC写
发表于 2020-07-03
STM32F4学习笔记之GPIO(使用固件库)
1.使能GPIO的AHB时钟,使用函数:    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);2.配置GPIO工作模式用GPIO_Init()函数数据类型说明typedef struct{  uint32_t GPIO_Pin;              //引脚配置GPIOMode_TypeDef GPIO_Mode;  //GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(备用),GPIO_Mode_AN(模拟
发表于 2020-06-14
调用STM32F4 库函数FLASH_ProgramWord() 出错问题
最近操作STM32F4的内部flash,吓了一跳。以前的STM32F107的时候还是4k一页,现在只分了12个Sector,后面几个128K这么大。从官网下了Flash programming manual,擦除之前得清除flash flag/* Clear All pending flags */FLASH_ClearFlag( FLASH_FLAG_EOP |  FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR | FLASH_FLAG_PGSERR);同时查看擦除函数,看着函数说明,正确的传参数就OK了/**  * @brief 
发表于 2020-06-09
stm32f4启动代码分析(一)
因为使用的开发板是stm32f407discovery,所以启动代码为st公司的官方库文件里的startup_stm32f40_41xxx.s,至于如何去找官方库文件,不在本节讨论的范围内,本节只是初步的分析startup_stm32f40_41xxx.s,其中更深入的东西需要在以后的章节中分析。在startup_stm32f40_41xxx.s中,有一段注释:;* File Name : startup_stm32f40_41xxx.s;* Author : MCD Application Team;* @version : V1.7.0;* @date : 22-April-2016;* Description
发表于 2020-05-08
STM8S_010_I2C读写EEPROM (硬件方式)
Ⅰ写在前面相信看过前面那篇文章“更加深入理解 I2C总线、协议及应用”的人,对I2C都有一定的了解了。那篇文章是针对I2C使用单片机IO模拟I2C方式实现读写操作。本文将讲述硬件I2C读写操作,也就是由处理器自身硬件的I2C实现时钟、数据的传输过程。为方便大家阅读,本文内容已经整理成PDF文件:http://pan.baidu.com/s/1i5uWhJRⅡSTM8硬件I2C知识STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz
发表于 2020-07-13
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved