历史上的今天
返回首页

历史上的今天

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

2019年01月04日 | stm32 i2c eeprom 24C02

2019-01-04 来源:eefocus

电路图 

1

2

2


举例


#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]);

    }

}


推荐阅读

史海拾趣

ALLIED [Allied Electronics]公司的发展小趣事

Allied Electronics,总部位于美国德克萨斯州的一家分销公司,专注于为各种行业提供电子元件和电子产品。以下是关于Allied Electronics发展的五个相关故事:

  1. 成立和初期发展: Allied Electronics成立于1928年,最初以销售家庭无线电零件和配件为主要业务。随着无线电和电子行业的发展,公司逐渐扩大了产品范围,开始提供更广泛的电子元件和设备,以满足不断增长的市场需求。

  2. 与RS Components的合并: 2000年,Allied Electronics与英国的RS Components公司合并,成为全球领先的电子元件分销商之一。这一合并加强了两家公司在全球市场的地位,并且拓展了它们的产品线和客户群。

  3. 公司战略调整: 随着数字化技术的快速发展,Allied Electronics逐渐调整了业务战略,加大了对电子元件和器件的供应,并拓展了工业自动化、物联网和电子制造等领域的业务。通过与各种行业的合作伙伴建立紧密的关系,公司不断提升了产品质量和服务水平。

  4. 技术创新和数字化转型: Allied Electronics致力于技术创新和数字化转型,通过建立先进的电子商务平台和在线资源中心,为客户提供更便捷的采购体验。同时,公司还加强了与供应商的合作关系,引入了更多的创新产品,满足不同客户的需求。

  5. 持续发展和全球扩张: 作为全球领先的电子元件分销商之一,Allied Electronics不断加大在全球范围内的市场扩张力度,开设了多个销售办事处和物流中心,以更好地服务于全球客户。同时,公司还积极参与行业展会和活动,加强了与全球电子行业的合作与交流,推动了公司的持续发展和壮大。

Captive Fastener公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

Belkin公司的发展小趣事

贝尔金的成功不仅仅局限于美国本土。随着全球市场的不断扩张,贝尔金也在全球范围内建立了广泛的销售网络和物流中心。位于加州洛杉矶的总部、好莱坞的工业设计中心以及纽约州罗切斯特的研发机构,共同构成了贝尔金全球业务的核心。这些机构之间的紧密合作,确保了贝尔金能够迅速响应全球市场的需求,提供高品质的产品和服务。

FASTRAX公司的发展小趣事

在成立初期,FASTRAX就注重技术创新,不断推出新的产品和技术方案。其中,Fastrax iSuite MP SDK软件开发系统是其技术创新的代表,该系统为编程人员提供了丰富的资源,大大简化了GPS接收模块的开发过程。这一创新不仅提升了FASTRAX产品的竞争力,也推动了整个电子行业的发展。

Electronic Transistors Corp公司的发展小趣事

作为一家领先的电子企业,ETC公司深知自身肩负的社会责任。公司积极履行社会责任,关注环境保护和资源节约。ETC通过引进先进的生产工艺和设备,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与公益事业和社会活动,为社会做出了积极贡献。这些举措不仅提升了ETC的企业形象,也为公司的可持续发展奠定了坚实的基础。

安普康(AMPCOM)公司的发展小趣事

在电子行业竞争日益激烈的背景下,安普康深知创新是企业发展的核心动力。因此,公司始终将研发投入作为重要战略之一。通过引进先进的生产设备和技术,安普康不断提升产品的品质和性能。同时,公司还积极与国内外知名企业和研究机构合作,共同开展技术研发和创新。这些努力使得安普康在光纤产品、布线产品等领域取得了多项专利,并成功推出了一系列具有市场竞争力的新产品。

问答坊 | AI 解惑

单片机与TA8435的步进电机细分控制方法

1 步进电机 步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变成角位移,即给一个脉冲,步进电机就转一个角度,因此非常适合单片机控制。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响, ...…

查看全部问答>

SAW器件封装技术概述

1 引言 现今,随着整机尺寸的减小和元器件的高度集成,促进了元器件的小型化、薄型化。由于SAW(Surface Acoustic Wave)器件小型化并且有着出众的滤波功能,它们存许多领域的应用中扮演着非常重要的角包。小型化和多功能化是SAW器件发展的主要动力 ...…

查看全部问答>

请问这个msgQReceive函数的返回值是什么?

请问这个msgQReceive函数的返回值是什么?…

查看全部问答>

在wince6.0下有没有像平常手机的那种数字小键盘的英文输入法?

就是平常的2是abc,3是def那种输入法,这是要自己实现还是有现成的输入法还是系统定制的时候有哪个选项? 请各位帮下忙,平常比较来论坛少分也不多,麻烦知道的说下.…

查看全部问答>

驱动,键盘过滤

代码如下: NTSTATUS c2pDispatchRead(                               IN PDEVICE_OBJECT DeviceObject,        ...…

查看全部问答>

推荐一本用PowerPC开发通信设备的书,我还是第一次见同类型的书

嵌入式设计及通信设备开发详解——基于MPC82XX处理器 卓越的链接 http://www.amazon.cn/mn/detailApp?qid=1238487283&ref=SR&sr=13-1&uid=168-0888845-7367438&prodid=bkbk941360 当当的链接 http://product.dangdang.com/product.aspx?pro ...…

查看全部问答>

内存映射文件

谁在EVC 中实现过内存映射文件?我想将数据保存到配置文件中.用文件操作的方式,数据很多的时候,速度会很慢.现在我想试一下内存映射方式,不知道如何通过内存映射文件来操作配置文件,请大家发表意见.…

查看全部问答>

本人是应届毕业生,拿些什么项目去应聘呢?

本人是重点本科2008届的即将毕业生,由于大学没好好学,就过了四二级,找工作一定很难,想找两个单片机项目去面试,这样有点优势,但是不知道找些什么项目,我自己熟悉下,然后变成自己的去面试,大家给个建议吧!另外我想到深圳去找单片机的工 ...…

查看全部问答>

高速ADC的电源设计

当今许多应用都要求高速采样模数转换器(ADC)具有12位或以上的分辨率,以便用户能够进行更精确的系统测量。然而,更高分辨率也意味着系统对噪声更加敏感。系统分辨率每提高一位,例如从12位提高到13位,系统对噪声的敏感度就会提高一倍。因此,对于A ...…

查看全部问答>