stm32 i2c eeprom 24C02

发布者:Dingsir1902最新更新时间:2019-01-04 来源: eefocus关键字:stm32  i2c  eeprom  24C02 手机看文章 扫描二维码
随时随地手机看文章

电路图 

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

    }

}


关键字:stm32  i2c  eeprom  24C02 引用地址:stm32 i2c eeprom 24C02

上一篇:stm32 ds18b20 温度传感器
下一篇:stm32 rtc 实时时钟

推荐阅读最新更新时间:2024-03-16 16:21

STM32模拟IIC读写AT24CXX
以前只用51做过AT24C02,后来才接触到容量更大的型号,发现了很多和以前的不一致的东西,现总结如下。 在上一篇博客中已经写好了STM32用IO口模拟IIC的基本驱动代码,下面结合数据手册用上一篇博客提到的函数编写AT24CXX全系列通用的驱动代码。 我们先来看AT24CXX的中文手册。 这是写操作的步骤。 而上面提到的从器件的地址信息由下图所示。 不同的容量的AT24CXX的从器件地址位是不同的。这在后面的基本的读写函数的关于器件的不同就有所体现。 下面先初始化AT24CXX: void AT24CXX_Init() { IIC_Init(); } 这里只需要初始化IIC总线即可。 下面写出AT24CXX基本
[单片机]
<font color='red'>STM32</font>模拟IIC读写AT24CXX
基于I2C总线的锅炉温度测量系统的设计与实现
单片机作为典型的嵌入式控制器,具有集成度高、处理功能强、运行速度快、体积小、扩展灵活等优势,在仪器仪表、家用电器、过程控制等领域被广泛应用。锅炉温度是工业过程中最常见的工艺参数之一,其测量过程的抗干扰能力和测量值的精度是影响对锅炉温度控制效果的重要因素。为使系统更智能化,一般选择单片机为系统控制核心。但是,传统的单片机测量系统中实现A/D转换结果输出以及各器件之间的数据传递大多采用并行的通信方式,这种数据交换方式占用了大量的I/O资源,系统结构也因此变得复杂。同时大量的硬件连线也会带来很多干扰因素,降低了锅炉温度值的测量精度。为了解决传统设计中存在的问题,本文提出使用Philips公司推出的I2C总线(Inter Integrate
[测试测量]
基于<font color='red'>I2C</font>总线的锅炉温度测量系统的设计与实现
STM32——通用设备单元
不说废话,直接来说: 首先,STM32的通用设备单元包括了以下个部分,分别是通用输入/输出口(GPIO或者I/O)、外部中断单元、ADC转换模块、通用/高级定时器、实时时钟RTC、备份寄存器、入侵检测引脚。 通用输入/输出口 GPIO(总共有80个),分布在5个端口中,其中每个端口有16个GPIO,分别以A~E来命名这16个GPIO口。最大耐压值为5V。大部分的外部引脚都可以从通用的GPIO切换为用户设备的专用I/O口。STM32还有一个外部中断控制单元,允许将每个端口上的16个GPIO通过映射成为外部中断输入口。 外部中断单元 外部中断单元(共19个外部中断(EXTI)通道),通过内嵌向量中断控制器(NVIC)与中断
[单片机]
一个基于无操作系统的STM32单片机的单片机内存管理器
本代码基于无操作系统的STM32单片机开发,功能强大,可申请到地址空间连续的不同大小的内存空间,且用户接口简单,使用方便。直接贴代码: memory.h: memory.c:
[单片机]
一个基于无操作系统的<font color='red'>STM32</font>单片机的单片机内存管理器
STM32开发笔记4: STM32F407 UART的使用方法
单片机型号:STM32F407 STM32F4内嵌4个通用异步/同步收发器(USART1、USART2、USART3、USART6)和两个通用异步收发器(UART4和UART5)。本文讲解此6个串行口,在异步模式下的使用方法,如不加说明,以USART1为例。 可以按照下述步骤,对通用异步串行口进行设置。 1、打开config.h文件,对如下图所示的宏进行设置,0x0c表示将当前串行口UART1的波特率设为115200bps,无效验。 2、打开main.c文件,可以在其中断服务函数中,完成接收逻辑的代码编写,如下图所示。此代码表明,当串行口收到1个字节的数据后,将触发串行口中断,在中断服务程序中,将
[单片机]
<font color='red'>STM32</font>开发笔记4: STM32F407 UART的使用方法
stm32 通过串口控制led灯亮灭 并通过lcd显示led灯的亮灭状态
#include main.h #include stm32f0xx_hal.h /* USER CODE BEGIN Includes */ #include lcd.h /* USER CODE END Includes */ /* Private variables ---------------------------------------------------------*/ UART_HandleTypeDef huart1; /* USER CODE BEGIN PV */ /* Private variables -----------------------------------------
[单片机]
Uip在STM32平台移植之建立UDP链接
在STM32上通过建立UDP连接实现数据的传输。在上节提到采用的是轻型的TCP/IP协议栈Uip,在Uip协议中实现UDP连接的创建,需要以下步骤: 第一步,打开支持UDP协议的配置项,支持的UDP连接的个数,参考上节的配置文件。 第二步,确定本地的IP地址和端口号(192.168.0.100 9999),远程主机的IP地址和端口号(192.168.0.22 9998) #define IP_ADDR1 192 #define IP_ADDR2 168 /#define IP_ADDR3 3 /#define IP_ADDR4 100 #define UDP_REMOTE_PORT 9998 #define UDP_LOCA
[单片机]
STM32-CAN总线滤波器的使用
stm32的屏蔽滤波功能对ID是有要求的,在STM32 这里ID必须进行移位处理. 对照下表: 我们这里全部设置成1,也就是只接受CAN_Filter中设置的节点的数据 STM32共有14组过滤器,用以对接收到的帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。对于过滤器组,可以将其配置成屏蔽位模式,这样CAN_FxR0中保存的就是标识符匹配值,CAN_FxR1中保存的是屏蔽码,即CAN_FxR1中如果某一位为1,则CAN_FxR0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN_FxR1中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进行匹配。过滤器组还可以被配置
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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