历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2020年01月11日 | IIC实现对EEPROM(24C02)的读写

2020-01-11 来源:eefocus

概述:EEPROM芯片型号为24C02,该芯片的总容量是256个字节,该芯片通过IIC总线与外部连接。


实验功能:通过KEY1按键来控制24C02的写入,通过另外一个按键KEY0来控制24C02的读取。


硬件电路:


IIC配置代码:


//初始化IIC

void IIC_Init(void)

{

  GPIO_InitTypeDef  GPIO_InitStructure;

 

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟

 

  //GPIOB8,B9初始化设置

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉

  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化

IIC_SCL=1;

IIC_SDA=1;

}

//产生IIC起始信号

void IIC_Start(void)

{

SDA_OUT();     //sda线输出

IIC_SDA=1;     

IIC_SCL=1;

delay_us(4);

  IIC_SDA=0;//START:when CLK is high,DATA change form high to low 

delay_us(4);

IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 

}   

//产生IIC停止信号

void IIC_Stop(void)

{

SDA_OUT();//sda线输出

IIC_SCL=0;

IIC_SDA=0;//STOP:when CLK is high DATA change form low to high

  delay_us(4);

IIC_SCL=1; 

IIC_SDA=1;//发送I2C总线结束信号

delay_us(4);    

}

//等待应答信号到来

//返回值:1,接收应答失败

//        0,接收应答成功

u8 IIC_Wait_Ack(void)

{

u8 ucErrTime=0;

SDA_IN();      //SDA设置为输入  

IIC_SDA=1;delay_us(1);    

IIC_SCL=1;delay_us(1);  

while(READ_SDA)

{

ucErrTime++;

if(ucErrTime>250)

{

IIC_Stop();

return 1;

}

}

IIC_SCL=0;//时钟输出0    

return 0;  

//产生ACK应答

void IIC_Ack(void)

{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=0;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}

//不产生ACK应答     

void IIC_NAck(void)

{

IIC_SCL=0;

SDA_OUT();

IIC_SDA=1;

delay_us(2);

IIC_SCL=1;

delay_us(2);

IIC_SCL=0;

}      

//IIC发送一个字节

//返回从机有无应答

//1,有应答

//0,无应答   

void IIC_Send_Byte(u8 txd)

{                        

    u8 t;   

SDA_OUT();     

    IIC_SCL=0;//拉低时钟开始数据传输

    for(t=0;t<8;t++)

    {              

        IIC_SDA=(txd&0x80)>>7;

        txd<<=1;   

delay_us(2);   //对TEA5767这三个延时都是必须的

IIC_SCL=1;

delay_us(2); 

IIC_SCL=0;

delay_us(2);

    }  

}     

//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   

u8 IIC_Read_Byte(unsigned char ack)

{

unsigned char i,receive=0;

SDA_IN();//SDA设置为输入

    for(i=0;i<8;i++ )

{

        IIC_SCL=0; 

        delay_us(2);

IIC_SCL=1;

        receive<<=1;

        if(READ_SDA)receive++;   

delay_us(1); 

    }  

    if (!ack)

        IIC_NAck();//发送nACK

    else

        IIC_Ack(); //发送ACK   

    return receive;

}

以上代码为IIC驱动代码,实现包括IIC的初始化、IIC开始、IIC结束、ACK、IIC读写等功能,在其它函数里面,只需要调用相关的IIC函数就可以和外部IIC器件通信了,这里并不局限于24C02,该段代码可以用在任何IIC设备上。

推荐阅读

史海拾趣

GardTec Inc公司的发展小趣事

背景:随着公司实力的不断增强,GardTec开始积极拓展新的市场领域,提升品牌影响力。

发展:公司不仅在风扇配件市场保持领先地位,还逐步将业务拓展到更广泛的电子配件领域。同时,GardTec积极参加各类行业展会和交流活动,提升品牌知名度和影响力。

影响:通过市场拓展和品牌影响力的提升,GardTec在电子行业中的地位更加稳固,为公司的长期发展奠定了坚实的基础。同时,这也为公司的合作伙伴和客户带来了更多的机遇和价值。

ANADIGICS公司的发展小趣事

背景:GardTec Inc公司,成立于1987年(也有资料显示为1985年),自创立之初便确立了成为全球风扇配件产品第一供应商的目标。这一明确的定位为公司后续的发展奠定了坚实的基础。

发展:在创立初期,GardTec专注于风扇配件的研发与生产,通过技术创新和品质提升,逐渐在行业内崭露头角。公司利用现代化的制造和工程设施,不断突破设计与材料的限制,推出了一系列具有创新性的风扇配件产品。

影响:随着产品质量的提升和市场份额的扩大,GardTec逐渐在电子行业中建立了良好的口碑,为后续的快速发展奠定了基础。

欧密格光电(Amicc)公司的发展小趣事

背景:随着公司实力的不断增强,GardTec开始积极拓展新的市场领域,提升品牌影响力。

发展:公司不仅在风扇配件市场保持领先地位,还逐步将业务拓展到更广泛的电子配件领域。同时,GardTec积极参加各类行业展会和交流活动,提升品牌知名度和影响力。

影响:通过市场拓展和品牌影响力的提升,GardTec在电子行业中的地位更加稳固,为公司的长期发展奠定了坚实的基础。同时,这也为公司的合作伙伴和客户带来了更多的机遇和价值。

Bias Power公司的发展小趣事

在竞争激烈的电子行业中,Bias Power公司始终坚持质量至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产加工、产品测试等各个环节都进行严格把关。此外,公司还引入了先进的生产设备和技术,确保产品的稳定性和可靠性。

由于公司对产品质量的严格把控,Bias Power公司的产品在市场上享有很高的声誉。许多知名企业都选择与其合作,将其产品应用于关键领域和重要项目中。这种信赖和认可为Bias Power公司的发展提供了有力支持。

Chip Supply Micro Devices公司的发展小趣事

在微电子器件领域,Chip Supply Micro Devices凭借一项创新技术,成功打破了市场格局。公司研发出了一种新型低功耗芯片,不仅提高了电子设备的性能,还降低了能源消耗。这一技术突破使得Chip Supply Micro Devices迅速获得了市场的认可,产品销量激增。公司借此机会扩大生产规模,加大研发投入,进一步巩固了其在微电子器件市场的地位。

CML公司的发展小趣事

CML公司成立于1968年,那是一个半导体技术刚刚起步的年代。公司创始人们洞察到单芯片解决方案的巨大潜力,决心打破当时标准组件组装的常规,着手创建创新的单芯片产品。初创时期,CML面临着资金短缺、技术瓶颈以及市场竞争等多重挑战。然而,正是在这样的环境下,CML凭借对技术的执着和对市场的敏锐洞察,成功推出了首款产品——频率敏感开关。这款产品凭借其卓越的性能和稳定性,迅速在消费产品市场赢得了口碑,为CML的发展奠定了坚实的基础。

问答坊 | AI 解惑

模拟电路

我模拟电路学的不 怎么样 。 幸好有电子工程论坛啊…

查看全部问答>

TI2000系列DSP开发应用

TI2000系列DSP开发应用,课件。…

查看全部问答>

运动与健康市场的人体传感器网络PAN

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 近年来,随着各种短距离无线通信技术的发展,人们提出了一个新的概念,即个人局域网PAN(Personal Area Network)。      PAN 核心思想是,用无线电或红外线或者蓝牙代替传统的有线电缆 ...…

查看全部问答>

超正的红外解码资料 不看就走宝咯

本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 喜欢就顶下吧  …

查看全部问答>

DS18B20

问下 就是DS18B20负温度如何弄 ,我做来总是有1度的误差…

查看全部问答>

《小强爬行记》全套漫画:道尽毕业生辛酸

近日,天涯社区一名广州的网友“卖身找工作”,自称是仍然失业的应届毕业生,他结合眼下“被就业”“跨省追捕”等时兴话题及自 身的经历,以漫画“小强爬行记”道尽自己大学毕业以来就业路上的种种辛酸经历。他调侃自己为一只“踩不死的小强,就算 ...…

查看全部问答>

奇特的发光引路带子

  你有没有当夜猫子的习惯,有没有半夜起床翻冰箱,找水喝的“恶习”。但是又不想开电打扰家人或者麻烦去开电,那就让发光带子给你引路吧...把这些带子贴在你晚上频繁经过的地方,沙发角、茶几角、阶梯、门把手,白天你几乎看不到这些带子 ...…

查看全部问答>

FIR滤波器的问题

写了一个FIR滤波器的程序。要求大约是200Hz采样速率,16阶,17抽头。算出来延迟是40毫秒。并且算好了滤波系数。 可能是我对“延迟”的理解有问题,代码写成滤波函数定时每40毫秒运行一次,取当时最近的一次采样结果进行滤波。运行的结果当然是惨不 ...…

查看全部问答>

100分请教高手Trace32如何加载符号

在cmm文件中设置如下: &UBOOT_EXECUTED_ADDRESS=0x33e00000 &UBOOT_PATH=\"Y:\\svn\\uboot_tao\\uboot-1.3.4-m9\" &UBOOT_IMAGE=\"&UBOOT_PATH\\u-boot\" &UBOOT_CODE=\"&UBOOT_PATH\\\" print \"u-boot loading again for Debugging\" Data ...…

查看全部问答>

ShellExecuteEx 打开bat文件一闪

= _T(\"searchlist.bat\");          //执行DOS命令                                TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...…

查看全部问答>